Como executo um script KWin a partir do console (para definir o foco para uma janela específica no KDE)?

1

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:

  1. Pressione Alt + F2 , digite

  2. 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'
    
por JKAbrams 12.08.2017 / 18:40

2 respostas

4

Depois de muito mais tentativa e erro do que eu gostaria, parece que é possível executar uma string contendo um script diretamente, comunicando com o plasmashell, como no exemplo a seguir (que é o que eu estava tentando, como parte de mover o painel quando eu girar a tela):

qdbus org.kde.plasmashell /PlasmaShell evaluateScript \ "panelById(panelIds[0]).location='right'"

    
por 30.12.2017 / 23:32
2

Depois de todo esse problema, encontrei uma maneira alternativa de definir o foco ( Definir o foco para abrir a janela :

wmctrl -i -a $(wmctrl -l | grep "\- Oracle VM VirtualBox" | tail -n 1 | cut -d ' ' -f1)

Ainda interessado em entender como executar scripts do KWin.

    
por 12.08.2017 / 18:43