{{{#!vorlage Warnung 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 [user:ChickenLipsRfun2eat:Verfasser] des Howtos. }}} {{{#!vorlage Hinweis Diese Howto-Anleitung wurde zuletzt von [user: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) }}} {{{#!vorlage Wissen [:Yakuake: Hauptartikel zu Yakuake] [:D-Bus: qdbus verwenden] [:Shell/Bash-Skripting-Guide_für_Anfänger/:Grundlagen in bash-Scripting] }}} [[Inhaltsverzeichnis()]] Yakuake bietet sehr viele Möglichkeiten zur Automatisierung und Manipulation durch [:D-Bus: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 [https://techbase.kde.org/Development/Tutorials/Using_KParts KParts] {en}, 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 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 ([[Vorlage(Tasten, shift+ctrl+t)]]). In einem Tab führen wir aus: {{{#!vorlage befehl qdbus org.kde.yakuake /Windows/1 org.kde.konsole.Window.newSession }}} Nun kann innerhalb dieses Tabs das Fenster mit {{{#!vorlage befehl 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. [[Vorlage(Tasten,shift+rechts)]] für den Wechsel der Sitzung, und [[Vorlage(Tasten,shift+hoch)]] 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. {{{#!vorlage befehl qdbus org.kde.yakuake /yakuake/window org.kde.yakuake.toggleWindowState }}} =Tabs manipulieren= ==Titel ändern== Mit {{{#!vorlage befehl 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 {{{#!vorlage befehl 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 {{{#!vorlage befehl 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: {{{#!vorlage befehl qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER}}} {{{#!vorlage tabelle Lese-Befehl(e) Rückgabe-Typ Parameter Beschreibung +++ activeSessionId[[BR]]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: {{{#!vorlage befehl qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER}}} {{{#!vorlage tabelle Methode Beschreibung Screenshot +++ <-3 rowclass="kopf">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 +++ <-3 rowclass="kopf">entfernen +++ removeSession SESSION_ID Session mit Hilfe der SessionID entfernen. +++ removeTerminal TERMINAL_ID Ein Terminal innerhalb einer Session entfernen. +++ <-3 rowclass="kopf">aktivieren +++ raiseSession SESSION_ID Session anhand ihrer ID in den Vordergrund holen. +++ <-3 rowclass="kopf">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. {{{#!vorlage befehl qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.runCommandInTerminal TERMINAL_ID "BEFEHL"}}} Um Befehle im derzeit aktiven Terminal auszuführen kann {{{#!vorlage Befehl 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. {{{#!vorlage befehl #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: {{{#!vorlage befehl qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER}}} {{{#!vorlage tabelle 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: {{{#!vorlage befehl qdbus org.kde.yakuake /yakuake/sessions org.kde.yakuake.BEFEHL PARAMETER}}} {{{#!vorlage tabelle Lese-Befehl(e) Rückgabe-Typ Parameter Änderungsbefehl Parameter +++ hasTerminalsWithMonitorActivityEnabled[[BR]]hasTerminalsWithMonitorActivityDisabled bool - setSessionMonitorActivityEnabled int terminalId, bool enabled +++ hasTerminalsWithMonitorSilenceEnabled[[BR]]hasTerminalsWithMonitorSilenceDisabled bool int sessionID setSessionMonitorSilenceEnabled int terminalId, bool enabled }}} =Beispiele= ==Status des Sessionschutzes ermitteln== {{{#!code bash #!/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== {{{#!code bash #!/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. {{{#!code bash #!/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. {{{#!vorlage 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== * [:Yakuake: Hauptartikel zu Yakuake] * [:D-Bus: qdbus verwenden] * [:Shell/Bash-Skripting-Guide_für_Anfänger/:Grundlagen in bash-Scripting] ==extern== * [archwiki:Yakuake:] * [https://www.kde.org/applications/system/yakuake/ Yakuake auf KDE.org] * [https://cgit.kde.org/yakuake.git/tree//? Yakuake Quellcode] #tag: Howto