Fernsteuern von Konsole-Tabs

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Fernsteuern von Konsole-Tabs

Beitrag von eggy » 15.07.2020 14:41:46

Hallo, hat jemand von Euch ne Idee wie ich das gelöst bekomme?

Ich hab ungefähr 10 laufende Sessions von Konsole (KDE-Terminal mit bash), jeweils mit ca. 10 bis 20 offenen Tabs. In genau einem davon läuft ein vim in der eine bestimmte Datei offen ist. Via "ps aux | grep dateiname", bekomm ich die PID. Aber wie finde ich nun den entsprechenden Konsole-Tab? Und wie bekomm ich ihn den Vordergrund geholt? Der WM ist Fluxbox, der hat einiges an Shortcuts, die man Fenstern bzw getabten Programmen zuweisen kann. Mein Problemfall sind aber die Konsole eigenen Tabs, an die komm ich via Fluxbox vermutlich nicht ran.

Ich dachte, dass man mit "wmctrl -l -p" vielleicht was anfangen kann, leider werden die Konsole-Fenster da auch nur im Ganzen aufgelistet, die Konsole Tabs darin leider nicht.

Und ja, dass mit den tausend Tabs muss so sein, screen ist zwar toll, in dem Fall aber keine Lösung (und tmux und Kollegen ebenfalls nicht).

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Fernsteuern von Konsole-Tabs

Beitrag von smutbert » 15.07.2020 21:46:04

Mit dbus vielleicht?
Es gibt in der Dokumentation einen leider sehr viel zu kurzen Abschnitt dazu, mit qdbus (Debianqdbus-qt5): https://docs.kde.org/trunk5/en/applicat ... pting.html

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Fernsteuern von Konsole-Tabs

Beitrag von eggy » 16.07.2020 09:35:39

Das sieht schonmal gut aus. Danke!

uname
Beiträge: 12396
Registriert: 03.06.2008 09:33:02

Re: Fernsteuern von Konsole-Tabs

Beitrag von uname » 16.07.2020 15:16:40

eggy hat geschrieben:Und ja, dass mit den tausend Tabs muss so sein, screen ist zwar toll, in dem Fall aber keine Lösung (und tmux und Kollegen ebenfalls nicht).
Doch.

Ich denke ich würde eher Debiantmux nutzen, da es dort weniger Probleme mit den Zeichensätzen gibt.

Code: Alles auswählen

tmux new -s meinevimsitzung
In der Sitzung dann den Vim starten und benutzen

Code: Alles auswählen

tmux a -t meinevimsitzung
Damit von egal wo (nur nicht aus einer anderen Tmux-Sitzung) die Sitzung wieder aufrufen

Und im Notfall legst du ein paar Scripte unter /usr/local/bin an.
ich denke mit

Code: Alles auswählen

tmux a -t $1 || tmux new -s $1
(nicht ausprobiert) kannst du was nettes bauen ;-)
Statt Detach können sie ja das Fenster einfach schließen.


https://gist.github.com/henrik/1967800

eggy
Beiträge: 3334
Registriert: 10.05.2008 11:23:50

Re: Fernsteuern von Konsole-Tabs

Beitrag von eggy » 17.07.2020 06:37:54

uname hat geschrieben: ↑ zum Beitrag ↑
16.07.2020 15:16:40
eggy hat geschrieben:Und ja, dass mit den tausend Tabs muss so sein, screen ist zwar toll, in dem Fall aber keine Lösung (und tmux und Kollegen ebenfalls nicht).
Doch.
@uname:
Nein, nix doch.
Wie oben erwähnt "in dem Fall", u.a. weil die Fenster gleichzeitig im Vordergrund sichtbar sein müssen.
Sonst bin ich auch ein großer Fan von Terminalmultiplexern, aber hier bringen die ausnahmsweise mal wirklich nichts.

@smutbert :
Danke nochmal, ich hab's direkt ins Script eingebaut, funktioniert perfekt :THX:
Nach Deinem Hinweis war es auch ganz einfach: mit "qdbus $fenster /Windows/1 org.kde.konsole.Window.nextSession" solange durch die Tabs schalten, bis der gesuchte gefunden ist.
qdbusviewer ist übrigens ne echte Hilfe, falls man bei den vielen qbus Methoden mal den Überblick verliert, da findet man schnell was man sucht. Weitere Doku war (diesmal) nicht notwendig, die entsprechenden Methoden sind glücklicherweise sinnvoll benannt.

Benutzeravatar
detix
Beiträge: 1743
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Fernsteuern von Konsole-Tabs

Beitrag von detix » 17.07.2020 21:02:55

Du kannst aber auch gezielt auf einen TAB umschalten, in deinem Fall wohl so (2. TAB):

Code: Alles auswählen

qdbus $fenster /Windows/1 org.kde.konsole.Window.setCurrentSession 2
# oder einen Befehl im 1. TAB ausführen:
qdbus $fenster /Sessions/1 org.kde.konsole.Session.runCommand ls
Für das was mit gerade geöffneten Fenstern möglich ist hatte ich mal ein kleines Skript geschrieben:

Code: Alles auswählen

#!/bin/bash
qdbus_Befehle=$(qdbus)
cd /tmp
>qdbus_Befehle.txt
for Servicename in $qdbus_Befehle; do
  echo -e "╔══════════ Anfang Service Name: $Servicename ══════════╗\n" >>qdbus_Befehle.txt
  x=$(qdbus $Servicename)
  for y in $x; do
    echo "╔══ Unterpunkt: qdbus $Servicename $y" >>qdbus_Befehle.txt
    qdbus $Servicename $y 2>/dev/null >>qdbus_Befehle.txt
    echo -e "╚══ Ende Unterpunkt: qdbus $Servicename $y\n" >>qdbus_Befehle.txt
  done
  echo -e "╚═══════════ Ende Service Name: $Servicename ═══════════╝\n" >>qdbus_Befehle.txt
done
Suche halt in dieser Textdatei nach der Pid der Konsole, wäre auch die Bezeichnung anstelle von $fenster oder so...

Code: Alles auswählen

qdbus | grep konsole
org.kde.konsole-12275
qdbus org.kde.konsole-12275 /Sessions/3 org.kde.konsole.Session.runCommand ls # wird in TAB 3 ausgeführt
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Antworten