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" \( \)
findet eigentlich alles danach, bis ausschliesslich das Klammerpaar am Ende (18.9"), dies wird durch
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:
relativ einfach gehalten: gib Variable \1 aus = "Monitor-1: DP-1 res: 1440x900", dann das Wort "diag:", gefolgt von Variable \2 = "(18.9")".
entfernt überflüssige Klammern und
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