我需要将焦点设置在 KDE 中的 VirtualBox,我为此目的编写了一个 KWin 脚本,但我不知道如何从控制台运行它。
我尝试过的:
该 KWin 脚本适用于桌面 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 中的更改引起的这些问题:
QDBus查看器
所以我运行qdbus查看器看一下。
它应该是 KWin 而不是 kwin.Scripting。
我在左侧列表中找到了 org.kde.KWin,在右侧列表中找到了 Scripting,在 org.kde.kwin.Scripting 下,我找到了 loadScript 和 start 方法。我可以通过双击它们来手动使用这些方法,加载我的脚本文件,它可以工作,我的脚本得到运行并且 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 中有时右窗格中有编号条目(它们来来去去)。当数字存在时,实际上有一个脚本项和一个运行方法。所以我尝试这个:
该命令给出的数字与 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'
答案1
经过比我希望的更多的尝试和错误后,似乎可以通过与plasmashell通信直接运行包含脚本的字符串,如下例所示(这恰好是我正在尝试的,作为移动当我旋转屏幕时面板):
qdbus org.kde.plasmashell /PlasmaShell evaluateScript \ "panelById(panelIds[0]).location='right'"
答案2
经过所有这些麻烦,我找到了另一种设置焦点的方法(将焦点设置到新打开的窗口):
wmctrl -i -a $(wmctrl -l | grep "\- Oracle VM VirtualBox" | tail -n 1 | cut -d ' ' -f1)
仍然有兴趣了解如何运行 KWin 脚本。