从 Kodi 菜单启动脚本

Launch script from Kodi menu

我是 运行 Kodi 18,我想在主菜单中添加一个项目,它只是启动一个 bash 脚本。经过大量搜索,没有明显的方法来编辑菜单(我不想为此更改主题)。

我也不想为此创建一个完整的插件(这似乎是 google 找到的唯一替代方案)。

这么简单,没有人发布操作方法吗?或者这是不可能的?有人可以提供建议吗?

这部分回答了您的问题:它允许为您的脚本创建键盘快捷键,而不是在主菜单中创建项目。

两个内置函数允许执行 bash 个脚本:

System.Exec(exec)

执行shell命令。脚本的完整路径必须放在括号内。

System.ExecWait(exec)

执行shell命令并冻结Kodi直到shell关闭。与 "System.Exec(exec)" 一样,脚本的完整路径必须放在括号内。

信息来自here。我已经测试了第二个,它与位于 ~/.local/bin 中的 bash 脚本完美配合,但有一个限制:您不能将参数传递给脚本。 ~/.local/bin 位于默认用户 $PATH(在 Raspbian 上),这允许我仅使用脚本名称而不是完整路径。

您可以通过创建 user keyboard shortcut file

来调用此函数
nano ~/.kodi/userdata/keymaps/keyboard.xml

并加入其中

<keymap>
  <global>
    <keyboard>
      <a mod=shift,ctrl>System.ExecWait(script.sh)</a>
    </keyboard>
  </global>
</keymap>
  • keymap是文件的整体描述,不应更改。
  • global指的是window可以使用link(如果当前特定window)
  • keyboards指的是快捷键(可以加上游戏手柄,鼠标等)
  • a 是激活快捷键的键,这里使用修饰符 shift+ctrl (对于单个快捷键可以删除,但要注意与 [=17= 冲突]).不要忘记在行尾也修改它。
  • script.sh 是您的脚本名称(如果不在用户 $PATH 中则为完整路径)必须是可执行的,所有 shell 脚本也是如此.

如果更换主题没问题,您还可以使用通常允许自定义主菜单的Aeon系列主题。当然,如果您喜欢它们的外观,这只是一个解决方案,但它们通常是可定制的。

快速检查可用于 Kodi 18 的皮肤:

  • Aeon(除Tajo以外的大多数版本与其他版本相比有点简单)
  • 琥珀色
  • Unity(好像分享了我在Aeon用的)
  • Rapier(有点受限,但仍可以添加自定义操作,如 System.Exec)

使用这些皮肤,您可以编辑主菜单(通过 Kodi 的“界面”设置菜单中可用的皮肤设置下的各种屏幕)。您可以在那里选择自定义命令并使用 System.ExecSystem.ExecWait。我在 Kodi 18 的 Windows 和路径中有 space 的命令上确实有问题,这可以通过使可执行文件在 $PATH 中可用并确保可执行文件名称不可用来解决包含 spaces.

编辑

我刚刚意识到您不想切换主题(我读到不想创建一个)。为此,不幸的是,默认(河口)皮肤不提供可定制性,但是,您可以编辑 addons/skin.estuary/xml/Home.xml。 在这个文件中,你可以找到这个位:

...
                    <content>
                        <item>
                            <label>$LOCALIZE[342]</label>
                            <onclick condition="Library.HasContent(movies) + Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/,return)</onclick>
                            <onclick condition="Library.HasContent(movies) + !Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/titles/,return)</onclick>
                            <onclick condition="!Library.HasContent(movies)">ActivateWindow(Videos,sources://video/,return)</onclick>
                            <property name="menu_id">$NUMBER[5000]</property>
                            <thumb>icons/sidemenu/movies.png</thumb>
                            <property name="id">movies</property>
                            <visible>!Skin.HasSetting(HomeMenuNoMovieButton)</visible>
                        </item>
...

在这里您可以将其更改为以下内容(例如):

...
                    <content>
                        <item>
                            <label>Firefox</label>
                            <onclick>System.Exec(firefox)</onclick>
                        </item>
                        <item>
                            <label>$LOCALIZE[342]</label>
                            <onclick condition="Library.HasContent(movies) + Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/,return)</onclick>
                            <onclick condition="Library.HasContent(movies) + !Skin.HasSetting(home_no_categories_widget)">ActivateWindow(Videos,videodb://movies/titles/,return)</onclick>
                            <onclick condition="!Library.HasContent(movies)">ActivateWindow(Videos,sources://video/,return)</onclick>
                            <property name="menu_id">$NUMBER[5000]</property>
                            <thumb>icons/sidemenu/movies.png</thumb>
                            <property name="id">movies</property>
                            <visible>!Skin.HasSetting(HomeMenuNoMovieButton)</visible>
                        </item>
...

这会将 Firefox 菜单项放在菜单列表的顶部。

请注意,虽然您可以就地编辑此插件,但它可能会在皮肤更新时覆盖更改。因此,最好用新名称复制文件夹并更新 addon.xml 以更改插件的 ID,并可选择将您的名字添加到其中。这显然更复杂,但我认为这是您无需真正更改皮肤且无需从头编写插件即可拥有它的唯一方法。