如何從控制台執行 KWin 腳本(將焦點設置到 KDE 中的特定視窗)?
我需要在 KDE 中將焦點設置為 VirtualBox,為此我編寫了一個 KWin 腳本,但我不知道如何從控制台執行它。
我試過的:
此 KWin 腳本在Desktop Shell 腳本控制台中工作
如何打開桌面 Shell 腳本控制台:
- 按
Alt
+F2
,輸入- 執行 wm 控制台
劇本:
// Main reference: http://techbase.kde.org/Development/Tutorials/KWin/Scripting // API: https://techbase.kde.org/Development/Tutorials/KWin/Scripting/API_4.9 // Sets focus to VirtualBox var clients = workspace.clientList(); for (var i=0; i<clients.length; i++) { print(clients[i].caption); var cap = clients[i].caption; if (cap.indexOf("- Oracle VM VirtualBox") != -1) { workspace.activeClient = clients[i]; } }
但是當我嘗試在 Bash 中執行它時(根據這種方法),腳本似乎沒有設置,因為我得到了這些錯誤:
Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.kde.kwin.Scripting was not provided by any .service files Error org.freedesktop.DBus.Error.ServiceUnknown: The name org.kde.kwin.Scripting was not provided by any .service files
我不知道 dbus 在內部是如何工作的,所以從這裡開始我只是嘗試一下。
我試圖解決這些由新版本 KDE 中的變化引起的問題:
QDBusViewer
所以我執行qdbusviewer來看看。
它應該是 KWin 而不是 kwin.Scripting。
我在左側列表中找到 org.kde.KWin,在右側找到 Scripting,在 org.kde.kwin.Scripting 下找到方法 loadScript 並啟動。我可以通過點兩下手動使用這些方法,載入我的腳本文件並且它可以工作,我的腳本開始執行,VirtualBox 獲得焦點。
所以我嘗試相應地修改載入命令:
dbus-send --print-reply --dest=org.kde.KWin /Scripting org.kde.kwin.Scripting.loadScript string:"/home/jk/msexcel_setfocus.kwinscript" dbus-send --print-reply --dest=org.kde.KWin /Scripting org.kde.kwin.Scripting.start
這些命令不會給出錯誤,但它也不起作用。
dbus 是否正常工作?
我嘗試了其他方法,只是為了看看 dbus 是否正常工作,這很有效(啟用/禁用 FPS 效果):
dbus-send --print-reply --session --dest=org.kde.KWin /Effects org.kde.kwin.Effects.loadEffect string:"showfps" dbus-send --print-reply --session --dest=org.kde.KWin /Effects org.kde.kwin.Effects.unloadEffect string:"showfps"
編號條目
所以在上面連結的腳本中有這個業務,帶有某種編號的路徑,我發現在 QDBusViewer 中,有時在右窗格中有編號的條目(它們來來去去)。當數字存在時,其中實際上有一個 Scripting 項和一個 run 方法。所以我試試這個:
該命令確實給出了一個與 QDBusViewer 中出現的數字相對應的數字。
num=$(dbus-send --print-reply --dest=org.kde.KWin /Scripting org.kde.kwin.Scripting.loadScript string:"/home/jk/msexcel_setfocus.kwinscript" | awk 'END {print $2}') echo $num dbus-send --print-reply --dest=org.kde.KWin /$num org.kde.kwin.Scripting.run
但是最後一個命令不起作用,在run方法之前執行start方法(如上)也不起作用,然後它抱怨數字消失了。
Error org.freedesktop.DBus.Error.UnknownObject: No such object path '/1'
經過比我想要的更多的試驗和錯誤,似乎可以通過與 Plasmashell 通信直接執行包含腳本的字元串,如下例所示(這恰好是我正在嘗試的,作為移動當我旋轉螢幕時面板):
qdbus org.kde.plasmashell /PlasmaShell evaluateScript \ "panelById(panelIds[0]).location='right'"
經過這麼多麻煩,我找到了另一種設置焦點的方法(將焦點設置為新打開的視窗):
wmctrl -i -a $(wmctrl -l | grep "\- Oracle VM VirtualBox" | tail -n 1 | cut -d ' ' -f1)
仍然有興趣了解如何執行 KWin 腳本。