Keyboard-Shortcuts

如何在啟動時執行 KWin 腳本,如果它在啟動時不執行,安裝腳本的目的是什麼

  • March 23, 2022

最近我一直在玩 KWin 腳本https://develop.kde.org/docs/plasma/kwin/

我知道我可以通過以下任一方式打開用於創建 KWin 腳本的 IDE:

  • 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
X-KDE-PluginInfo-Email=yyy@gmail.com
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 '/'

確保您不僅安裝了腳本,而且還啟用了腳本:

系統設置 > 視窗管理 > KWin 腳本 > 選中腳本的複選框 > 應用

或者

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

引用自:https://unix.stackexchange.com/questions/677166