staging.inyokaproject.org

Wie findet man heraus, welches Programm hinter einem Bildschirmfenster steckt?

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

4-Elster-4

Anmeldungsdatum:
23. Oktober 2014

Beiträge: 93

In Xfce haben die verschiedenen Programme in der GUI Namen, die bei einer nicht-Englischsprachigen Installation von den Namen dahinterstehenden Programmen abweichen. So steht z.B.

  • hinter Anzeige das Programm xfce4-display-settings,

  • hinter Barrierefreiheit das Programm xfce4-accessibility-setting,

  • hinter Bildschirmschoner-Einstellungen das Programm xfce4-screensaver-preferences,

  • hinter Erscheinungsbild das Programm xfce4-appearance-settings,

  • hinter Sitzungen und Startverhalten das Programm xfce4-settings-editor,

  • usw.

Ob die Namen in der deutschen Lokalisation wirklich sinnvoll sind, will ich hier nicht diskutieren. Es ist auch gar nicht einfach, das immer richtig zu machen, denn einige der Einstellungsprogramme würden unter mehrere Hauptüberschriften passen.

Irgendwo gibt es in Xfce sicher eine Tabelle mit den technischen Namen der Programme (Dateinamen der Binärdateien) und den Titeln der Programme gespeichert ist.

  • Wie kann ich dafür sorgen, daß ich schnell und eindeutig identifizieren kann, wie das Programm heißt (Name der Binärdatei), dem ein Fenster auf dem Bildschirm „gehört“?

  • Wie kann ich erfahren, wie ein bestimmter Menüpunkt in der englischen Sprachversion heißt, ohne gleich die gesamte Lokalisiation meines Rechners oder eines installierten Programms zu ändern?

  • Gibt es gar etwas, was temporär (z.B. solange man eine bestimmte Tastenkombination gedrückt hält) das Fenster mit dem Programmdialog im Vordergrund in englischer Sprachversion anzeigt?

Es müßte dazu doch etwas jederzeit und einfach zu Bedienendes geben, damit die ganze Diskussion im Internet über Einzelheiten nicht laufend an babylonischer Sprachverwirrung leidet! Sinnvollerweise sollte so ein Hilfsmittel auch zusätzlich die Version des damit ermittelten Programms anzeigen und es sollte auf Wahl prüfen können,

  • ob es die neueste „offizielle“ Version für die installierte Version der jeweiligen Linux-Variante ist,

  • ob es eine neuere „freigegebene“ in einem anderen Paket gibt (und von welchem Datum die ist), und wie das Paket genau heißt.

So ein Hilfsmittel würde den Umgang mit Linux sicher sehr grundlegend erleichtern. Vielleicht gibt es das lange, nur habe ich noch nicht davon gehört!

Moderiert von Thomas_Do:

Dieses Thema ist verschoben worden. Es geht nicht wirklich um Lokalisierung. Bitte beachte die als wichtig markierten Themen („Welche Themen gehören hier her und welche nicht?“)!

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 680

Für X

xprop

? (Auf's Fenster klicken)

4-Elster-4

(Themenstarter)

Anmeldungsdatum:
23. Oktober 2014

Beiträge: 93

Marant-- schrieb:

Für X

xprop

? (Auf's Fenster klicken)

Interessant! Da kommt ziemlich viel im Terminal: Wie kann ich darin die (nicht wirklich brauchbare, aber platzverschwenderische) Wiedergabe des Programmlogos unterbinden?

Immerhin, mit

1
xprop | grep -E "^WM_NAME\(.*\) =.*" 

bekommt man im Terminal angezeigt, was in der Titelzeile des Fensters steht.

Irgendwo sehe ich noch so was:

1
WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"

wenn ich das mit dem Chromium-Fenster mache, in dem ich mir das gerade ansehe. Aber

1
xprop | grep -E "WM_CLASS(STRING) = .*"

liefert mir gar nichts zurück. Sicherheitshalber habe ich darin das ^ am Zeilenanfang mal weggelassen. Trotzdem kommt nichts, obwohl ich die davor gezeigte Zeile erhalten habe.

So ganz die Lösung meines Problems ist das natürlich noch nicht, aber immerhin ein guter Baustein, wenn man beginnen will, so was zu machen. Aber da bleibt noch viel Wegstrecke!

Gibt es keine GUI-basierte Lösung für dieses Problem? Sicher bin ich nicht der erste, der meine o.a. Klagen äußert!

ChickenLipsRfun2eat Team-Icon

Supporter
Avatar von ChickenLipsRfun2eat

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12070

Hallo!

Eine nicht-grafische Lösung wäre die Quellen direkt zu befragen. Du hast in {~/.local,/usr}/share/applications/ .desktop-Dateien, in denen diese Informationen stehen. Da kannst du dir dann quasi eine Liste ziehen mit

grep -HE 'Name=|Name\[de|Exec' {~/.local,/usr}/share/applications/*.desktop

Hilft dir nicht beim einzelnen identifizieren, aber vielleicht bei den Übersetzungen und spuckt Name, Name[de] und GenericName[de] aus. Comment gäbe es auch noch.

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 680

xprop | grep WM_CLASS

als Bsp geht doch...

"Grafische Lösung": ☺

notify-send "$(xprop | grep WM_CLASS)"

Auf Taste o.ä. legen.

Soll's notify-send nicht sein könnte auch per zenity,yad ausgegeben werden.

Bleys

Avatar von Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6053

Looking Glas: Alt+F2 → lg

Mit GUI und funktioniert auch, anders als xprop, unter Wayland

Bilder

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 680

Folgendes ist auch ganz praktisch. Gibt Pfad aus. Starten, auf gewünschtes Fenster innerhalb 5s.

sleep 5s; ps -Flwwp $(xdotool getwindowpid $(xdotool getwindowfocus)) 

von Hier.

4-Elster-4

(Themenstarter)

Anmeldungsdatum:
23. Oktober 2014

Beiträge: 93

Marant-- schrieb:

xprop | grep WM_CLASS

als Bsp geht doch...

Ah, mein Fehler! Ich hätte die runden Klammern escapen müssen! So geht es auch:

1
xprop | grep -E "^WM_CLASS\(STRING\)"

4-Elster-4

(Themenstarter)

Anmeldungsdatum:
23. Oktober 2014

Beiträge: 93

Marant-- schrieb:

xprop | grep WM_CLASS

als Bsp geht doch...

"Grafische Lösung": ☺

notify-send "$(xprop | grep WM_CLASS)"

Auf Taste o.ä. legen.

Danke für den Tip. Aus dem Terminal funktioniert das: Es kommt eine kreuzförmige Cursormarke. Nachdem ich damit auf das Fenster von Chromium klicke, kommt z.B. oben rechts für einige Sekunden:

WM_CLASS(STRING)="chromium-browser","Chromium-browser"

Das ist schon mal das erste Viertel von dem, was ich vorhabe.

Wenn ich $(notify-send "$(xprop | grep WM_CLASS)") auf die Tastenkombination Super-y lege, kommt beim Auslösen mit Super-y diese Fehlermeldung:

$(xprop | grep WM_CLASS)

(ich habe das Kommando, das zuvor im Terminal funktioniert hatte, genau nach Einstellungen>Tastatur>Tastenkürzel für Anwendungen kopiert und da der Tastenkombination Super-y zugewiesen.)

Weshalb geht das an der Stelle nicht?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

4-Elster-4 schrieb:

Weshalb geht das an der Stelle nicht?

Vermutlich weil der Befehl nicht im Rahmen einer Shell ausgeführt wird - versuch mal sowas wie

1
bash -c 'notify-send "$(xprop | grep WM_CLASS)"'

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 680

bash -c 'notify-send "$(xprop | grep WM_CLASS)"'

So sollte es gehen.

Upps.

Hat sich überschnitten..

..oder zur Abwechslung ☺

sh -c 'notify-send "$(xprop | grep WM_CLASS)"'

Falls Du es noch etwas verschönern willt:

bash -c 'notify-send -t 10000 -i dialog-information "Dein eigener Text" "$(xprop | grep WM_CLASS)"'

Die 10000 ist die Anzeigedauer im ms.

Zum 4. Mal editiert.

4-Elster-4

(Themenstarter)

Anmeldungsdatum:
23. Oktober 2014

Beiträge: 93

Marant-- schrieb:

xprop | grep WM_CLASS

als Bsp geht doch...

"Grafische Lösung": ☺

notify-send "$(xprop | grep WM_CLASS)"

Auf Taste o.ä. legen.

Soll's notify-send nicht sein könnte auch per zenity,yad ausgegeben werden.

Ich habe versucht, das noch ein bißchen zu verfeinern, damit nur der Programmname oben rechts erscheint:

1
2
3
4
5
6
a@w:~$ QQ=($(xprop | grep WM_CLASS)); echo "${QQ[2]}"  # aus dem Ergebnis ein Array machen, 2. Element davon: mit "" und ,
"mousepad",
a@w:~$ QQ=($(xprop | grep WM_CLASS)); echo "${QQ[2]}" | sed -r -e 's/,//g' | sed -r -e 's/"//g'  # ohne das
mousepad
a@w:~$ QQ=($(xprop | grep WM_CLASS)); notify-send "${QQ[2]}" | sed -r -e 's/,//g' | sed -r -e 's/"//g'
a@w:~$ 

Mit notify-send kommt aber

 "mousepad",

also mit doppelten Gänsefüßchen und den Komma danach. Das verstehe ich nicht (bin aber nur ein bash-Anfänger).

Geht so was eigentlich ohne die Zwischenergebnis-Variable QQ?

4-Elster-4

(Themenstarter)

Anmeldungsdatum:
23. Oktober 2014

Beiträge: 93

seahawk1986 schrieb:

4-Elster-4 schrieb:

Weshalb geht das an der Stelle nicht?

Vermutlich weil der Befehl nicht im Rahmen einer Shell ausgeführt wird - versuch mal sowas wie

1
bash -c 'notify-send "$(xprop | grep WM_CLASS)"'

Danke, wenn ich bash -c 'notify-send "$(xprop | grep WM_CLASS)"' hinter die Taste lege, funktioniert es tatsächlich!

Ich möchte das nun etwas weiter bearbeiten und nur den Programmnamen oben rechts anzeigen. Ich vesuch mal das Rezept aus diesem Tip:

  1. bash -c davor

  2. dann das gewünschte Kommando zwischen einfachen '.

Wenn ich nun das Kommando so nehme, wie es ist, gibt das sicher Konflikte mit den Paaren von '. Wahrscheinlich geraten die Paare der Einschlüsse durcheinander.

Deshalb habe ich das Kommando bash -c 'notify-send "$(xprop | grep WM_CLASS)"' so in ein weiteres Skript gekapselt:

1
2
3
4
#!/bin/bash
# ********************** Programmname.sh **************************
QQ=($(xprop | grep WM_CLASS))
notify-send "${QQ[2]}" | sed -r -e 's/,//g' | sed -r -e 's/"//g'

Obwohl die beiden verketteten sed-Befehle die doppelten Gänsefüßchen und das Komma beseitigen sollen, kommen sie trotzdem. Und so auch:

a@w:~$ bash -c './Programmname.sh'
a@w:~$ 

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 680

sed betrachte ich lieber von Weitem mit Respekt. ☺

auf die Schnelle:

QQ=($(xprop | grep WM_CLASS))

so:

QQ=$(xprop | grep WM_CLASS)
#auch
QQ=`xprop | grep WM_CLASS`

-

notify-send "${QQ[2]}" | sed -r -e 's/,//g' | sed -r -e 's/"//g'

notify-send gibt über "xyz" "xyz" aus. Also Befehle, die sich auf Ausgabe beziehen gehören in "xyz". Wenn möglich würde ich das aber gering halten, Variablen vorher setzen/filtern und nur die Variablen selbst mit notify-send ausgeben. Also, z B.

var1=1;var2=2;var3=3;var4=4
notify-send "Text mit $var1" "$var2 $var3 $var4"

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

4-Elster-4 schrieb:

1
2
3
4
#!/bin/bash
# ********************** Programmname.sh **************************
QQ=($(xprop | grep WM_CLASS))
notify-send "${QQ[2]}" | sed -r -e 's/,//g' | sed -r -e 's/"//g'

Du brauchst eine zusätzliche Process Substitution, damit notify-send nur das Ergebnis vorgesetzt bekommt - die beiden sed-Befehle kann man dann noch zusammenziehen:

1
notify-send $(sed -r -e 's/,//g;s/"//g' <<< "${QQ[2]}")
Antworten |