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 31.03.2020 unter Kubuntu 20.04 (dailybuild, beta) erfolgreich getestet.
Höchste getestete Plasma-Version: 5.18.3
Höchste getestete Yakuake-Version: 19.12.2
Vorherige getestete Kubuntu-Version: 19.04 LTS (25.03.2019)
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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- und Windows-Pfade beziehen sich direkt auf die verwendeten KParts 🇬🇧, hier - dem verwendbaren Teil von Konsole. Ein weiteres Beispiel für die Verwendung ist im Dateimanager Dolphin beim Druck auf F4. Die Konsole-KParts erlauben bspw. den Profilwechsel oder auch eine zweite Session innerhalb einer Yakuake-Instanz. Da dies schnell verwirrend werden kann, wird hier nur die Funktionsweise angedeutet, hat aber im weiteren Artikel keine Relevanz. Es wird lediglich auf Konsole verwiesen.
Weitere Session¶
Wir öffnen Yakuake mit mehreren Tabs ( ⇧ + Strg + T ).
In einem Tab führen wir aus:
qdbus org.kde.yakuake /Windows/1 org.kde.konsole.Window.newSession
Nun kann innerhalb dieses Tabs das Fenster mit
qdbus org.kde.yakuake /Windows/1 org.kde.konsole.Window.nextSession
gewechselt werden.
Falls man das nutzen möchte bietet sich das umbelegen der Tasten an. Bspw. ⇧ + → für den Wechsel der Sitzung, und ⇧ + ↑ für den Wechsel der Tabs.
Windows, Tabs und Sessions¶
Zum besseren Verständnis:
Window ist Yakuake selbst und beinhaltet alle Tabs, Sessions und Terminals
Ein Tab ist ein Reiter in Yakuake, der jeweils mindestens eine Session beinhaltet
Eine Session kann mehrere Terminals beinhalten (siehe splitSession/Terminal)
Ein Terminal repräsentiert eine Instanz von Konsole mit all ihren Eigenschaften
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.
Profilwechsel¶
Voraussetzung: Es müssen in Konsole eingerichtete Profile vorhanden sein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash # Kein Profilname übergeben? if [ "$#" -lt 1 ]; then printf "Bitte einen Profilnamen angeben.\n"; exit 1; fi # Prüfen, ob das erste Argument als Konsole-Profil existiert found=0; for i in $(konsole --list-profiles); do if [ "$1" == "$i" ]; then found=1; fi done if [ $found -eq 0 ]; then echo "$1 ist ein unbekannter Profilname. Möglich sind:$(konsole --list-profiles)"; exit 1; fi # iteriere über die bestehenden sessions und ändere das aktuelle Profil. IFS=, lst=$(qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.terminalIdList) for i in $lst; do ((i++)) qdbus org.kde.yakuake /Sessions/$i org.kde.konsole.Session.setProfile "$1" done |
Alternativ steht der Befehl konsoleprofile
zur Verfügung.
Hinweis:
Das Standardprofil von Yakuake entspricht NICHT dem Standardprofil von Konsole. Der Wert muss also separat gesetzt werden, entweder über das Menü oder in den jeweiligen rc-Dateien.
Links¶
intern¶
extern¶