如何在启动时运行 KWin 脚本,以及如果启动时不运行则安装脚本的用途

如何在启动时运行 KWin 脚本,以及如果启动时不运行则安装脚本的用途

最近在玩KWin脚本https://develop.kde.org/docs/plasma/kwin/

据我了解,我可以通过以下任一方式打开 IDE 来创建 KWin 脚本:

  • qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.showInteractiveKWinConsole在控制台中运行命令
  • plasma-interactiveconsole --kwin在控制台中运行命令
  • Alt+F2然后输入wm console然后输入

现在我创建了一个这样的脚本:

print("registerShortcut ...");;
registerShortcut("...","...", "Meta+C", function() {
   ...
});

我可以在 IDE 上成功运行它,当它运行时,当我签入它时journalctl,它会添加一个日志,打印上面的 registerShortcut 字符串:

$ journalctl -f | grep registerShortcut
Nov 12 xx:xx:xx HOST kwin_x11[1105]: js: registerShortcut ...

现在我有一个很好的 Meta+C 快捷方式来执行我在上面函数中指定的任何操作。

但我不想按Alt+F2然后输入wm console然后输入,然后每次启动时手动打开/加载脚本,只是为了启用我的快捷方式。

所以我正在看https://develop.kde.org/docs/plasma/kwin/#packaging-kwin-scripts希望如果我打包它然后将其安装在我自己的机器上,那么它将在启动时运行。所以我把它放在 ~/tools/kwin-script-1 中。

文件~/tools/kwin-script-1/metadata.desktop:

[Desktop Entry]
Name=kwin-script-1
Comment=kwin-script-1
Icon=preferences-system-windows

X-KDE-PluginInfo-Author=xxx
[email protected]
X-KDE-PluginInfo-Name=kwin-script-1
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-License=GPL

Type=Service
X-KDE-ServiceTypes=KWin/Script
X-Plasma-API=javascript
X-Plasma-MainScript=code/main.js

文件〜/tools/kwin-script-1/contents/code/main.js

print("registerShortcut ...");;
registerShortcut("...","...", "Meta+C", function() {
   ...
});

然后我安装它kpackagetool5 --type=KWin/Script -i ~/tools/kwin-script-1

但它所做的似乎只是将它们复制到~/.local/share/kwin/scripts/kwin-script-1/,并且它不会在启动时运行,从 的输出可以明显看出journalctl -b | grep registerShortcut是空的

所以,问题是:

  • 如何在启动时运行KWin脚本?
  • 如果安装 KWin 脚本并不能使其在启动时运行,那为什么还要安装呢?安装它们的目的是什么(或将它们复制到~/.local/share/kwin/scripts/...
  • 我知道如何从命令行运行 kwin 脚本?我已经尝试使用它们(我正在考虑将它们添加到我的 bash_profile 或 bashrc 以在启动时自动运行它):它不起作用(通过控制台手动运行或通过 bash_profile/bashrc 运行)
    • 命令:
script="/home/kristian/.local/share/kwin/scripts/kwin-script-1/contents/code/main.js"
num=$(dbus-send --print-reply --dest=org.kde.KWin \
    /Scripting org.kde.kwin.Scripting.loadScript \
    string:"$script" | awk 'END {print $2}' )
dbus-send --print-reply --dest=org.kde.KWin /$num \
    org.kde.kwin.Scripting.run
  • 输出:
Error org.freedesktop.DBus.Error.UnknownInterface: No such interface 'org.kde.kwin.Scripting' at object path '/4'
  • 命令:
$ script="/home/kristian/.local/share/kwin/scripts/kwin-script-1/contents/code/main.js"
num=$(dbus-send --print-reply --dest=org.kde.kwin.Scripting \
    /Scripting org.kde.kwin.Scripting.loadScript \
    string:"$script" | awk 'END {print $2}' )
dbus-send --print-reply --dest=org.kde.KWin /$num \
    org.kde.kwin.Scripting.run
  • 输出:
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.kde.kwin.Scripting was not provided by any .service files
Error org.freedesktop.DBus.Error.UnknownInterface: No such interface 'org.kde.kwin.Scripting' at object path '/'

答案1

确保您不仅安装了该脚本,而且还启用了该脚本:

系统设置 > 窗口管理 > KWin 脚本 > 选中脚本的复选框 > 应用

或者

kwriteconfig5 --file kwinrc --group Plugins --key nameofyourkwinscriptEnabled true
qdbus org.kde.KWin /KWin reconfigure

相关内容