Conky - Bastel - Display-Auflösung anzeigen  [Solved]

Message
Author
loik
Posts: 2196
Joined: Wed Dec 12, 2018 2:01 pm

Re: Conky - Bastel - Display-Auflösung anzeigen

#51 Post by loik »

Halo, Gosia.

Ja, dein Screenshot sieht aus wie ich es mir wünsche.
Wie simulierst du denn ?
Indem du das monitor.log anlegst, mit meinen Angaben darin ?


Bei mir im monitor.log stehen natürlich genau die gleichen Angaben, wie du sie gepostet hast, bzw. ich in Post #50.

Code: Select all

Monitor-1: DP-1 res: 1440x900 dpi: 90 size: 408x255mm (16.1x10.0") diag: 481mm (18.9") 
Monitor-2: HDMI-2 res: 1920x1080 hz: 60 dpi: 93 size: 527x296mm (20.7x11.7") diag: 604mm (23.8") 
Monitor-3: DVI-I-2-2 res: 1440x900 hz: 75 dpi: 143 size: 256x192mm (10.1x7.6") diag: 320mm (12.6") 
Monitor-4: DVI-I-1-1 res: 1920x1080 hz: 60 dpi: 92 size: 531x299mm (20.9x11.8") diag: 609mm (24") 

Klar, ohne Formatierungs-Lerzeichen.

Das ist eben genau das, was bei mir im Conky versucht wird zu zeigen.
Auf Grund der begrenzten Breite, ist es aber nur bis dpi zu lesen.
Je nach Menge der vorherigen Zeichen auch nur dp oder d.

User avatar
gosia
Posts: 1128
Joined: Sun Apr 28, 2019 3:43 pm

Re: Conky - Bastel - Display-Auflösung anzeigen

#52 Post by gosia »

Hallo loik,
loik wrote: Mon Dec 16, 2024 9:14 am Wie simulierst du denn ?
Indem du das monitor.log anlegst, mit meinen Angaben darin ?
ja, ich lege eine Datei /tmp/monitor.log mit deinen Daten an, bzw. die Datei habe ich schon und kopiere sie einfach nach /tmp.
Ich kann also die Zeile

Code: Select all

inxi -c0 -y -1 -Ga | awk '/Monitor-[0-9]*/ { sub(" *",""); print $0 } ' > $monlog
auskommentieren, weil die Datei $monlog (monlog="/tmp/monitor.log") dann schon vorhanden ist. Dann wird sie mit

Code: Select all

sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*)$\)/\1 diag: \2/' $monlog | tr -d '()' | column -t
verarbeitet, ausgegeben und in Conky angezeigt.
Zum testen kann man sich die Ausgabe auch im Terminal ansehen:

Code: Select all

Monitor-1:  DP-1       res:  1440x900   diag:  18.9"
Monitor-2:  HDMI-2     res:  1920x1080  diag:  23.8"
Monitor-3:  DVI-I-2-2  res:  1440x900   diag:  12.6"
Monitor-4:  DVI-I-1-1  res:  1920x1080  diag:  24"
passt genau.
Ich habe nochmal alles kontrolliert, und keinen Fehler entdeckt. Deine monitor.log stimmt mit meiner monitor.log überein, und das sed-Kommando im Skript aus #48 ist auch wie oben angegeben, keine Schreibfehler o.ä. vorhanden.
Ich hatte auch als erste Hypothese, dass sich die Ausgabe von

Code: Select all

inxi -c0 -y -1 -Ga
durch Updates verändert hätte. Aber das ist auch nicht der Fall, da, wie gesagt, die erzeugte Datei aussieht wie immer. Also, wenn Du das Skript kopiert hast, wüsste ich nicht, warum die Ausgabe bei dir anders ist als bei mir. Irgendwas in Conky verändert, absichtlich, unabsichtlich? Und wir reden von MX-21, hoffe ich mal.
Deine Ausgabe sieht aus, als ob die Datei gar nicht durch sed verarbeitet wurde. Da kommen noch die Werte von dpi, hz und size vor, obwohl sie eigentlich von sed rausgefiltert werden. Ich verstehe das nicht. Vielleicht kann das ja mal jemand mit deiner Datei nachvollziehen. Reicht ja deine Datei aus #51 irgendwohin kopieren, sagen wir mal nach /tmp/monitor.log, wie gehabt. Dann der Zweizeiler:

Code: Select all

monlog="/tmp/monitor.log"
sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*)$\)/\1 diag: \2/' $monlog | tr -d '()' | column -t
viele Grüsse gosia

loik
Posts: 2196
Joined: Wed Dec 12, 2018 2:01 pm

Re: Conky - Bastel - Display-Auflösung anzeigen

#53 Post by loik »

Hallo, Gosia.

Ja, wir reden von MX-21.3-64bit-xfce.
Dort nutze ich dein Script aus Post #48.

Was mich dabei irritiert, ist das dort steht:

Code: Select all

# mx-version: MX-23.4_x64 Libretto...
case $Version in
  23)
wenn ich 23.4 Libretto in 21.3 Wildflower ändere, hat das keinen Einfluss.
aber aus der 23 eine 21 machen, bewirkt, dass im Conky nix mehr angezeigt wird.

Also bisher benutzt, hatte ich das Script, genau so wie von dir in Post #48 hinterlegt.

Der Zweizeiler sieht bei mir so aus:

Code: Select all

mx-21:~
$ monlog="/tmp/monitor.log"
sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*)$\)/\1 diag: \2/' $monlog | tr -d '()' | column -t
Monitor-1:  DP-1       res:  1440x900   dpi:  90  size:  408x255mm  16.1x10.0"  diag:      481mm       18.9"         
Monitor-2:  HDMI-2     res:  1920x1080  hz:   60  dpi:   93         size:       527x296mm  20.7x11.7"  diag:  604mm  23.8"
Monitor-3:  DVI-I-2-2  res:  1440x900   hz:   75  dpi:   143        size:       256x192mm  10.1x7.6"   diag:  320mm  12.6"
Monitor-4:  DVI-I-1-1  res:  1920x1080  hz:   60  dpi:   92         size:       531x299mm  20.9x11.8"  diag:  609mm  24"
was genau den Angaben in meiner monitor.log entspricht.
set filtert bei mir nicht wie geplant.

User avatar
gosia
Posts: 1128
Joined: Sun Apr 28, 2019 3:43 pm

Re: Conky - Bastel - Display-Auflösung anzeigen

#54 Post by gosia »

Hallo loik,
loik wrote: Tue Dec 17, 2024 2:10 am wenn ich 23.4 Libretto in 21.3 Wildflower ändere, hat das keinen Einfluss.
das ist nur ein Kommentar...
ok, ein paar Erläuterungen zum Skript, damit Du besser basteln kannst. Da mir deine Bash-Kenntnisse nicht bekannt sind, eher mehr als weniger. Also alle für dich banalen Stellen einfach gähnend überspringen. Der Kürze halber habe ich die Skriptzeilen nummeriert und beziehe mich auf diese Nummern, #4 = Zeile 4

Code: Select all

     1	monlog="/tmp/monitor.log"
     2	typeset -i Version
     3	Version=$(cat /etc/mx-version | cut -c 4-5)  # mx-version: MX-23.4_x64 Libretto...
     4	case $Version in
     5	  23)
     6	      inxi -c0 -y -1 -Gxx | awk '/Monitor-[0-9]*/ { sub(" *",""); print $0 } ' > $monlog
     7	    if grep -q " pos: " $monlog
     8	    then
     9	      grep -Ei --color=never -o "pos.*:.*[0-9]{3,}x[0-9]{3,}" $monlog
    10	    else
    11	      grep -Ei --color=never -o "model.*:.*[0-9]{3,}x[0-9]{3,}" $monlog
    12	    fi
    13	    ;;
    14	   *)
    15	      inxi -c0 -y -1 -Ga | awk '/Monitor-[0-9]*/ { sub(" *",""); print $0 } ' > $monlog
    16	      sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*)$\)/\1 diag: \2/' $monlog | tr -d '()' | column -t
    17	    ;;
    18	esac
    19	exit
#3 ermitteln welche MX-Version vorliegt, aus MX-23.4_x64 wird z.B. Version=23
#4 sortiert welche Skriptzeilen für welche Version ausgeführt werden sollen, geht immer von Versionsnr) bis zu den doppelten Semikolons ;;
#5 also Version 23 von hier bis #13. Wenn Du MX-21 benutzt werden die Zeilen #5 bis #13 ignoriert, was ich hier auch mache.
#14 ab hier werden alle MX-Versionen verarbeitet, die nicht schon vorher "abgefangen" wurden, in userem Fall also alle Versionen ausser Version MX-23 (ist strategisch ungünstig, hätte ich andersrum machen sollen, also zuerst 21) und dann den Rest, aber das heben wir uns für später auf)
#15 die Ausgabe von inxi wird durch awk so gefiltert, dass nur die Zeilen die das Wort "Monitor-" gefolgt von einer Ziffer enthalten, in die Datei "/tmp/monitor.log" geschrieben werden. Hat rein praktische Gründe, um /tmp/monitor.log für die nachfolgende Verarbeitung durch sed übersichtlicher zu haben.
#16 zur Erklärung muss ich die Zeile etwas aufsplitten:

Code: Select all

\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\)
sorgt dafür, dass alles von "Monitor-X" bis zur Auflösung res: XxY"" gefunden und an die sed-eigene Variable \1 zugewiesen wird. Diese Zuweisung geschieht durch die umschliessenden "Klammerpaare" \( \)

Code: Select all

.*
findet eigentlich alles danach, bis ausschliesslich das Klammerpaar am Ende (18.9"), dies wird durch

Code: Select all

\((.*)$\)
gefunden (abgefangen) und wieder durch die "Klammerpaare" \( \) der Variablen \2 zugewiesen (es geht der Reihe nach, gäbe es noch so ein geklammertes Muster, so wäre dies \3 usw.)
Nach diesen Mustersuchen kommt der Ersetzungs- oder Ausgabeteil:

Code: Select all

 /\1 diag: \2/
relativ einfach gehalten: gib Variable \1 aus = "Monitor-1: DP-1 res: 1440x900", dann das Wort "diag:", gefolgt von Variable \2 = "(18.9")".

Code: Select all

tr -d '()'
entfernt überflüssige Klammern und

Code: Select all

column -t
bringt das ganze in eine halbwegs vernünftige Tabellenform, macht in der Theorie und bei mir

Code: Select all

Monitor-1:  DP-1       res:  1440x900   diag:  18.9"
Monitor-2:  HDMI-2     res:  1920x1080  diag:  23.8"
Monitor-3:  DVI-I-2-2  res:  1440x900   diag:  12.6"
Monitor-4:  DVI-I-1-1  res:  1920x1080  diag:  24"
bei dir leider nicht. Keine Ahnung, warum nicht.
Nach dieser zu langen Vorrede zum Kern der Sache, kannst Du deine Datei monitor.log auf einem beliebigen Filesharingsdienst (z.B. https://www.swisstransfer.com/de-de) posten, Hauptsache man muss sich nicht erst anmelden. Ich möchte ausschliessen, dass in der Datei irgenwelche Tabs, Zeilenumbrüchew o.ä. die Sache verderben. Beim blossen copy&paste geht sowas ja verloren. So richtig vorstellen kann ich es mir nicht, aber das ist das einzige was mir im Moment einfällt. Also direkt die Datei, nicht nur den Text.

viele Grüsse gosia

loik
Posts: 2196
Joined: Wed Dec 12, 2018 2:01 pm

Re: Conky - Bastel - Display-Auflösung anzeigen

#55 Post by loik »

Hallo, Gosia.

Oh Gottohgottohgott
So viel Aufwand.
Danke für die Erleuterung.
Weil, ja, meine Kenntnisse sind gleich Null.
Dazu morgen noch mal.



Das mit dem Datei-Teilen wollte erst mal nicht funktionieren.
Vermutlich wegen Zugriffsrechten auf das Dateisystem.
Klappte erst mit einer Kopie, die ich in den Downloadodner gelegt hatte.
Aber dann ging es.
https://www.swisstransfer.com/d/ec06c6a ... 9974dbb68b
Dieser Link läuft ab am 16.1.2025 um 19:41 ab

User avatar
gosia
Posts: 1128
Joined: Sun Apr 28, 2019 3:43 pm

Re: Conky - Bastel - Display-Auflösung anzeigen

#56 Post by gosia »

Hallo loik,
loik wrote: Tue Dec 17, 2024 1:44 pm So viel Aufwand.
kein Problem, das habe ich auch für mich gemacht, um nochmal alles auf der Suche nach eventuellen Fehlern zu überdenken.
loik wrote: Tue Dec 17, 2024 1:44 pm Klappte erst mit einer Kopie, die ich in den Downloadodner gelegt hatte.
danke, ich habe das Problem entdeckt. In deiner Datei endet jede Zeile mit einem Leerzeichen. Ich deute jetzt mal das letzt, störende Leerzeichen mit einem Unterstrich _ an:

Code: Select all

Monitor-1: DP-1 res: 1440x900 dpi: 90 size: 408x255mm (16.1x10.0") diag: 481mm (18.9")_
keine Ahnung wo das herkommt, ist in meinem Skript eigentlich nicht vorgesehen und kommt bei mir auch nicht vor. Was tun?
a) quick-and-dirty-Lösung: das sed-Kommando anpassen. Statt

Code: Select all

sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*)$\)/\1 diag: \2/'
dieses Kommando benutzen (die nachfolgenden Teile kannst du jetzt selbst ergänzen)

Code: Select all

sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*) *$\)/\1 diag: \2/'
b) herausfinden, woher das überflüssige Leerzeichen kommt

viele Grüsse gosia

loik
Posts: 2196
Joined: Wed Dec 12, 2018 2:01 pm

Re: Conky - Bastel - Display-Auflösung anzeigen  [Solved]

#57 Post by loik »

Hallo, Gosia.

Treffer:

Code: Select all

mx-21:~
$ monlog="/tmp/monitor.log"
sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*) $\)/\1 diag: \2/' $monlog | tr -d '()' | column -t
Monitor-1:  DP-1       res:  1440x900   diag:  18.9"
Monitor-2:  HDMI-2     res:  1920x1080  diag:  23.8"
Monitor-3:  DVI-I-2-2  res:  1440x900   diag:  12.6"
Monitor-4:  DVI-I-1-1  res:  1920x1080  diag:  24"
Das von dir vorgenommenen Einfügen des Leerzeichens,
vorher

Code: Select all

.*\((.*)$\)/\1
jetzt

Code: Select all

.*\((.*) $\)/\1
Hat es gebracht, dass das Leerzeichen am Ende keinen Einfluss mehr hat. :number1:

:worship: Danke. :spinning:


Aber noch mal zum Script-Aufbau:
wenn ich 23.4 Libretto in 21.3 Wildflower ändere, hat das keinen Einfluss.
das ist nur ein Kommentar...
Das hatte ich mir wegen Raute schon gedacht.
#3 ermitteln welche MX-Version vorliegt, aus MX-23.4_x64 wird z.B. Version=23
Das hatte ich vermutet.
Deshalb mein erfolgloser Versuch die 23 gegen 21 zu ersetzen.
Wenn Du MX-21 benutzt werden die Zeilen #5 bis #13 ignoriert, was ich hier auch mache.
Auch das ließ sich mutmaßen, dass das Script irgendwie so aufgebaut ist.
Aber ich konnte einfach nicht erkenne wie, weil ich irgend einen Hinweis auf "21" erwartet bzw. gesucht hatte.
#4 sortiert welche Skriptzeilen für welche Version ausgeführt werden sollen, geht immer von Versionsnr) bis zu den doppelten Semikolons ;;
Danke, für diese Erklärung, die mir in Zukunft hoffentlich dabei helfen wird, Scripte besser zu verstehen, wenn ich versuche sie zu manipulieren.
Was auch für deine weiteren aufschlussreichen Zeichen-Erklärungen gilt.

Trotzdem werde ich auch bei meinem noch folgenden aber wohl vorläufig letzten Conky-Bastel-Thema betreffend der CPU-Kernel-Angaben noch mal Hilfe benötigen.
Das wird sich dann zeigen, wenn ich das Thema eröffne.

Danke für deinen ... Service ... könnte man schon fast sagen.
Hilfe, jedenfalls.
Und immer wieder beeindruckend deine Geduld, wenn du es nicht müde wirst, zu versuchen auch jemandem mit begrenzter Auffassungsgabe, Wissen zu vermitteln.
Sehr erfreulich. :happy:

loik
Posts: 2196
Joined: Wed Dec 12, 2018 2:01 pm

Re: Conky - Bastel - Display-Auflösung anzeigen

#58 Post by loik »

Der Vollständigkeit halber noch nachgetragen.

Das jetzige finale Scrip funktioniert auch problemlos und wie gewünscht mit Namenangaben der Monitore in MX-23, so wie bereits die ersten Entwürfe.
Es hatte sich nix geändert.

Ausserdem funktioniert es auch an MX-19.
Verhält sich dort, wie in MX-21.

Und in allen Systemen wird auch über die Eigenschaften von nur einem vorhandenen Monitor bzw Display bei Notebooks informiert.
Top.

Code: Select all

#!/usr/bin/bash
# monitor.sh
# zeigt in Conky alle angeschlossenen Monitore u. deren Auflösung an
# Versionsverwaltung src
# 15.12.2024

Revision='0.3.5'

monlog="/tmp/monitor.log"

typeset -i Version
Version=$(cat /etc/mx-version | cut -c 4-5)  # mx-versionen: MX-23, ab Doppel-Semikolon ;;   MX-21, ( und MX 19 ) ...
case $Version in
  23)
      inxi -c0 -y -1 -Gxx | awk '/Monitor-[0-9]*/ { sub(" *",""); print $0 } ' > $monlog
    if grep -q " pos: " $monlog
    then
      grep -Ei --color=never -o "pos.*:.*[0-9]{3,}x[0-9]{3,}" $monlog
    else
      grep -Ei --color=never -o "model.*:.*[0-9]{3,}x[0-9]{3,}" $monlog
    fi
    ;;
   *)
      inxi -c0 -y -1 -Ga | awk '/Monitor-[0-9]*/ { sub(" *",""); print $0 } ' > $monlog
      sed 's/\(Monitor-[0-9]: .*res: [0-9]*x[0-9]*\).*\((.*) $\)/\1 diag: \2/' $monlog | tr -d '()' | column -t
    ;;
esac
exit
Das funktioniert natürlich nur, wenn man in seinem Conky-Script diesen Zeile ( mit angepasstem persönlichem Pfad zum monitor.sh Script ) einfügt.

Code: Select all

${color3}${color}${execi 15 ~/.conky/MX-Asq/Zusatz-Script_fuer_Monitor-Anzeigen_im_Conky/monitor.sh }

Post Reply

Return to “Deutsches Forum”