Eu preciso definir o foco para o VirtualBox no KDE, eu escrevi um script KWin para o propósito, mas não consigo descobrir como executá-lo a partir do console.
O que tentei:
Este script do KWin funciona no Console de Scripts do Desktop Shell
Como abrir o Console de Scripts do Desktop Shell:
-
Pressione Alt + F2 , digite
-
Execute o console wm
O script:
// 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];
}
}
Mas quando tento executá-lo no Bash ( de acordo com esse método ) o script não parece estar configurado quando recebo esses erros:
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
Eu não sei como o dbus funciona internamente então daqui em diante eu apenas tento coisas.
Eu tentei consertar esses problemas causados por mudanças nas versões mais novas do KDE:
QDBusViewer
Então eu corro o qdbusviewer para dar uma olhada.
Deve ser o KWin em vez do kwin.Scripting.
Encontrei o org.kde.KWin na lista à esquerda e o Scripting à direita, em org.kde.kwin.Scripting, eu encontro os métodos loadScript e start. Eu sou capaz de usar esses métodos manualmente clicando duas vezes sobre eles, carregando meu arquivo de script e ele funciona, meu script é executado e o VirtualBox recebe o foco.
Por isso, tento modificar os comandos de carregamento em conformidade:
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
Estes comandos não dão erro, mas também não funcionam.
O dbus está funcionando?
Eu tento outra coisa apenas para ver se o dbus está funcionando, e isso funciona (habilitando / desabilitando o efeito 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"
Entradas numeradas
Portanto, há este negócio no script ligado acima com um caminho numerado de algum tipo, acho que no QDBusViewer, por vezes, existem entradas numeradas no painel da direita (eles vêm e vão). E há realmente um item de script e um método de execução lá quando um número existe. Então eu tento isso:
Este comando fornece um número que corresponde ao número que aparece no 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
Mas o último comando não funciona, nem funciona o método start (como acima) antes do método run, então ele reclama que o número desapareceu.
Error org.freedesktop.DBus.Error.UnknownObject: No such object path '/1'