Howto/Yakuake Steuerung über DBUS

Achtung!

Die Verwendung dieses Howto geschieht auf eigene Gefahr. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich zusätzlich an den Verfasser des Howtos.

Hinweis:

Diese Howto-Anleitung wurde zuletzt von ChickenLipsRfun2eat am 25.03.2019 unter Kubuntu 19.04 (dailybuild, beta) erfolgreich getestet.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Hauptartikel zu Yakuake

  2. qdbus verwenden

  3. Grundlagen in bash-Scripting

Inhaltsverzeichnis
  1. Aufbau
    1. Einschränkungen
    2. Windows, Tabs und Sessions
  2. Fenster manipulieren
  3. Tabs manipulieren
    1. Titel ändern
    2. Titel ermitteln
    3. SessionID ermitteln
  4. Sessions manipulieren
    1. Sessions: Informationen
    2. Sessions: hinzufügen, entfernen, wechsel...
    3. Sessions: Befehle ausführen
    4. Sessions: aufteilen (split)
    5. Sessions: Tastatureingaben blockieren
    6. Sessions: Aktivität überwachen
  5. Beispiele
    1. Status des Sessionschutzes ermitteln
    2. Tab mit ssh-Verbindung öffnen
  6. Links
    1. intern
    2. extern

Yakuake bietet sehr viele Möglichkeiten zur Automatisierung und Manipulation durch D-BUS-Methoden. Im folgenden werden einzelne Möglichkeiten beschrieben und am Ende einige Beispiele gegeben. Die D-BUS-Methoden lassen sich seit Version 3.0.5 auch aufrufen, bevor Yakuake selbst gestartet wurde.

Aufbau

Einschränkungen

qdbus org.kde.yakuake gibt eine Übersicht der Möglichkeiten:

...
/Sessions
/Sessions/1...n
/Windows
/Windows/1..n
...
/yakuake
/yakuake/sessions
/yakuake/tabs
/yakuake/window

Die Sessions, bzw. Windows - Nummern enthalten zwar die aktuell geöffneten Tabs, beziehen sich aber auf das in Yakuake verwendete Terminalprogramm Konsole. Verwendet man diese Methoden, so erhält man einen Warnhinweis. Im Folgenden werden daher nur Methoden aus dem Pfad /yakuake zur Manipulation vorgestellt.

Windows, Tabs und Sessions

Zum besseren Verständnis:

Fenster manipulieren

Hier bietet Yakuake lediglich den Wechsel zwischen Anzeigen und Verstecken an, was die selbe Funktion darstellt, die auch von der eingestellten Taste (Standard:F12) ausgelöst wird.

qdbus org.kde.yakuake /yakuake/window org.kde.yakuake.toggleWindowState  

Tabs manipulieren

Titel ändern

Mit

qdbus org.kde.yakuake /yakuake/tabs org.kde.yakuake.setTabTitle SESSION_ID TITEL 

lässt sich der Titel eines Tabs ändern.

Titel ermitteln

Den aktuell verwendeten Titel bekommt man mit

qdbus org.kde.yakuake /yakuake/tabs org.kde.yakuake.tabTitle SESSION_ID 

Hinweis: Yakuake beginnt beim zählen mit 0. Tab 1 ist also das zweite Register von links.

SessionID ermitteln

Die SessionID kann man über

qdbus org.kde.yakuake /yakuake/tabs org.kde.yakuake.sessionAtTab TAB_NUMMER 

ermitteln.

Sessions manipulieren

Sessions: Informationen

Die Tabelle bietet eine Übersicht der möglichen Befehle und Abfragen. Aus Gründen der Übersichtlichkeit wurde der Pfad org.kde.yakuake. entfernt. Die Befehle können wie folgt ausgeführt werden:

qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER 

Lese-Befehl(e) Rückgabe-Typ Parameter Beschreibung
activeSessionId
activeTerminalId
int - Gibt die Session- oder Terminal-ID des Tabs an, die sich im Vordergrund befindet. Dies gilt auch, wenn sich Yakuake selbst im Hintergrund befindet.
hasUnclosableSessions() bool - Ermittelt, ob in einer der Sessions noch ein Prozess läuft.
isSessionClosable bool int sessionID Ermittelt, ob eine bestimmte Session einen laufenden Prozess enthält, oder beendet werden kann.
terminalIdList QString - Gibt eine Zahlenfolge der verfügbaren Terminal-IDs aus.
terminalIdsForSessionId QString int sessionID Gibt die Terminal-IDs für eine bestimmte SessionID aus.

Sessions: hinzufügen, entfernen, wechseln

Yakuake bietet mehrere Möglichkeiten eine neue Session zu öffnen. Der Rückgabewert ist ein Integer (Ganzzahl), die die hochgezählte Session-Nummer enthält. Diese kann zur weiteren Manipulation verwendet werden. Die Tabelle bietet eine Übersicht der möglichen Befehle und Abfragen. Aus Gründen der Übersichtlichkeit wurde der Pfad org.kde.yakuake. entfernt. Die Befehle können wie folgt ausgeführt werden:

qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER 

Methode Beschreibung Screenshot
hinzufügen
addSession Öffnet eine einfache Session
addSessionQuad Öffnet eine Session mit vier Konsolenfenstern BILD
addSessionTwoHorizontal Session mit zwei Konsolenfenstern nebeneinander BILD
addSessionTwoVertical Session mit zwei Konsolenfenstern untereinander BILD
entfernen
removeSession SESSION_ID Session mit Hilfe der SessionID entfernen.
removeTerminal TERMINAL_ID Ein Terminal innerhalb einer Session entfernen.
aktivieren
raiseSession SESSION_ID Session anhand ihrer ID in den Vordergrund holen.
Sperren
setSessionClosable SESSION_ID BOOL Eine Session kann vor versehentlichem Schließen geschützt, oder dieser Schutz wieder aufgehoben werden.

Sessions: Befehle ausführen

Unabhängig vom derzeit aktivierten Yakuake und der aktivierten Session lassen sich Befehle in den vorhandenen Terminals ausführen.

qdbus org.kde.yakuake /yakuake/sessions  org.kde.yakuake.runCommandInTerminal TERMINAL_ID "BEFEHL" 

Um Befehle im derzeit aktiven Terminal auszuführen kann

qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.runCommand "BEFEHL" 

verwendet werden.

Sessions: aufteilen (split)

Bestehende Terminals, so wie Sessions können in mehrere Terminals aufgeteilt werden.

#Vertikale Aufteilung
qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.splitSessionLeftRight SESSION_ID
qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.splitTerminalLeftRight TERMINAL_ID

#horizontale Aufteilung
qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.splitSessionTopBottom SESSION_ID
qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.splitTerminalTopBottom TERMINAL_ID 

Sessions: Tastatureingaben blockieren

Mit Hilfe dieser Methoden kann man "nur lesen"-Terminals oder Sessions erstellen in denen Tastatureingaben gesperrt sind. Man kann dort aber Befehle mittels runCommand absetzen.

Die Tabelle bietet eine Übersicht der möglichen Befehle und Abfragen. Aus Gründen der Übersichtlichkeit wurde der Pfad org.kde.yakuake. entfernt. Die Befehle können wie folgt ausgeführt werden:

qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER 

Befehl(e) Rückgabe-Typ Parameter
hasTerminalsWithKeyboardInputDisabled bool int sessionID
hasTerminalsWithKeyboardInputEnabled bool int sessionID
setSessionKeyboardInputEnabled void int sessionID, bool enabled
setTerminalKeyboardInputEnabled void int sessionID, bool enabled

Sessions: Aktivität überwachen

Yakuake bietet eine Möglichkeit Terminalprozesse zu überwachen. Dabei ist es möglich, sowohl die Aktivität, als auch die Inaktivität als Auslöser zu definieren. Der Auslöser sendet eine Benachrichtigung über das KDE-Benachrichtigungssystem. Über den DBUS lässt sich dieses Signal abfangen und weiterverarbeiten.

Die Tabelle bietet eine Übersicht der möglichen Befehle und Abfragen. Aus Gründen der Übersichtlichkeit wurde der Pfad org.kde.yakuake. entfernt. Die Befehle können wie folgt ausgeführt werden:

qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER 

Lese-Befehl(e) Rückgabe-Typ Parameter Änderungsbefehl Parameter
hasTerminalsWithMonitorActivityEnabled
hasTerminalsWithMonitorActivityDisabled
bool - setSessionMonitorActivityEnabled int terminalId, bool enabled
hasTerminalsWithMonitorSilenceEnabled
hasTerminalsWithMonitorSilenceDisabled
bool int sessionID setSessionMonitorSilenceEnabled int terminalId, bool enabled

Beispiele

Status des Sessionschutzes ermitteln

1
2
3
4
5
#!/bin/bash
IFS=',' #Feldtrenner auf Komma setzen
for i in $(qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.sessionIdList); do
    echo "Session:$i is closable: $(qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.isSessionClosable $i)"
done

Tab mit ssh-Verbindung öffnen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/bash

#neue Session hinzufügen und ID in $newSession speichern
newSession=$(qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.addSession)

#Session schützen
qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.setSessionClosable $newSession FALSE

#Titel des Tabs der Session ändern
qdbus org.kde.yakuake /yakuake/tabs org.kde.yakuake.setTabTitle $newSession "SSH-Session"

#terminalID herausfinden: (ACHTUNG: Erstellt man mit split weitere Terminals, so enthält die terminalID eine Liste!
terminalID=$(qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.terminalIdsForSessionId $newSession)

#Befehl zur Verbindung ins Terminal absetzen
qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.runCommandInTerminal $terminalID "ssh user@server -p22 -i /Pfad/zum/PublicKey"

Hinweis: Verwendet man keinen PublicKey, so muss selbstverständlich das Passwort eingegeben werden, bevor die Verbindung hergestellt werden kann.

intern

extern