如何从控制台运行 KWin 脚本(将焦点设置到 KDE 中的特定窗口)?

如何从控制台运行 KWin 脚本(将焦点设置到 KDE 中的特定窗口)?

我需要将焦点设置在 KDE 中的 VirtualBox,我为此目的编写了一个 KWin 脚本,但我不知道如何从控制台运行它。

我尝试过的:

该 KWin 脚本适用于桌面 Shell 脚本控制台

如何打开桌面 Shell 脚本控制台:

  1. Alt+ F2,输入

  2. 运行 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 脚本。

相关内容