Linuxmuster-linuxclient7: logout-Script

Hallo zusammen,
ich würde gerne die Monitoreinstellungen (sind in $HOME/.config/monitors.xml gespeichert) der User im Ordner Einstellungen speichern. Dazu habe ich auf dem Client in /etc/linuxmuster-linuxclient7/onLogin.d/ das Skript 20_monitor.sh mit folgendem Inhalt gespeichert:

#!/bin/bash

#Monitorprofile 
if [ -d $HOME/media/$USER/Einstellungen/monitors.xml ]; then
    rm -rf $HOME/.config/monitors.xml
    ln -s $HOME/media/$USER/Einstellungen/monitors.xml $HOME/.config/monitors.xml
else
    mkdir -p $HOME/media/$USER/Einstellungen
    mv $HOME/.config/monitors.xml $HOME/media/$USER/Einstellungen/monitors.xml
    ln -s $HOME/media/$USER/Einstellungen/monitors.xml $HOME/.config/monitors.xml
fi

Meldet sich ein Benutzer an, so legt das Skript einen Link auf die Monitoreinstellungen im Einstellungsverzeichnis des Users an.
Soweit klappt alles.
Wenn der Benutzer jetzt seine Einstellungen verändert, wenn er beispielsweise einen Beamer an einen Laptop anschließt und die Tonausgabe auf HDMI legt, wird das in .config/monitors.xml gespeichert.
Leider wird aber .config/monitors.xml nach .config/monitors.xml~ kopiert und erst dann werden die Änderungen in .config/monitors.xml gespeichert.
Im Einstellungsverzeichnis liegt also immer noch die die alte Version von .config/monitors.xml.

Lösungsidee
Beim Abmelden kopiert man .config/monitors.xml ins Einstellungsverzeichnis.
Leider scheitere ich genau daran.

Hat mir da jemand einen Tipp?

In .bash_logout habe ich cp $HOME/.config/monitors.xml $HOME/media/$USER/Einstellungen/monitors.xml eingefügt. Leider ohne Erfolg…

Gruß,
Mathias

Hallo Mathias,

leider keine Antwort auf den Problem, sondern eine allgemeine Frage:

Bei meinem Ubuntuclient auf der Basis des sogenannten „default-cloops“ wird die monitors.xml per postsync auf die betreffenden clients gebracht. Funktioniert postsync auch beim neuen Ubuntuclient oder muss ich mich auf eine andere Technik einstellen?

Viele Grüße

Wilfried

Hallo Winfrid,

Ja, das funktioniert. Mein Problem ist, dass wir viele verschiedene Rechner und Beamer haben. Da wäre ich eine ganze Weile beschäftigt, wenn ich da eine passende monitors.xml erzeugen wollte.
Naja, wenn ich keine Lösung finde, werde ich es vielleicht doch so machen :slight_smile:

Gruß,
Mathias

Hallo Mathias,

auch wir haben einen Beamer-Zoo. Ich bin halt einmal mit einem USB-Stick durchgegangen und habe die monitors.xml mit den erforderlichen Einstellungen wachsen lassen. Die fertige Datei mit allen Einstellungen bekommen nahezu alle clients per postsync. So lassen sich auch neue Beamer usw. schnell integrieren. Es gibt auch eine Skript-Lösung, die ich aber nicht probiert habe.

Viele Grüße

Wilfried

Hey,

ich kann mir vorstellen dass das Logout Script nicht mehr im Userkontext sondern Root Kontext ausgeführt wird. Das sollte in der Doku stehen.

In diesem Fall wäre die $HOME Variable wohl falsch befüllt für den Anwendungsfall.

Hej, danke für den Hinweis. Könnte das jemand bestätigen und wenn es dann so ist ein Issue anlegen.

Danke

Beste Grüße

Thorsten

Hier steht alles dazu:

Es gibt momentan keinen onLogout hook, nur einen onLogoutAsRoot.
Das liegt einfach daran, dass ich keinen zuverlässigen Weg gefunden hab, beim Logout ein Script im Userkontexz auszuführen. Falls jemand einen kennt, schau ich mir das gerne an.

VG, Dorian

Hallo Zusammen,

der Inhalt des Skripts steht:

#!/bin/bash

if [ -e $HOME/media/$USER/Einstellungen/monitors.xml ] && [ ! -L $HOME/.config/monitors.xml ]; then
  echo "Datei existiert und soll überschrieben werden" > $HOME/test.txt
  cp $HOME/.config/monitors.xml $HOME/media/$USER/Einstellungen/monitors.xml
else
  echo "Datei soll nicht überschrieben werden" > $HOME/test.txt
fi
exit 0

Wenn man das in /etc/gdm3/PostSession/Default einträgt, wird es beim Abmelden abgearbeitet.
Nur leider sind zu diesem Zeit sämtliche Shares nicht mehr gemountet :frowning:

Die Testausgabe landet in $HOME/test.txt aber eben nicht in $HOME/media/$USER/test.txt.

Mir gehen leider langsam die Ideen aus… Falls jemand noch eine Idee hat, wäre ich dankbar…

Gruß,
Mathias

Hi Mathias,

Genau das Problem hatte ich beim Testen auch immer.
Eine andere Möglichkeit wäre noch ein cron Job (aber zugegebenermaßen eher unschön), oder ein watchdog, z.B. inotifywait.

VG, Dorian

Hallo Dorian,
ja, das mit dem cron Job ging mir auch durch den Kopf. Wenn sonst nichts geht…
Gruß,
Mathias

Ich denke, der watchdog ist ne bessere Idee. Einfach ein Script schreiben, was bei Änderungen an der Datei die Kopiererei macht und das dann im Hintergrund ausführen.

VG, Dorian

Das hört sich super an. Leider kenne ich mich mit watchdog nicht aus. Was ich bisher gefunden habe, ist der watchdog-Timer, der das System zurücksetzt, wenn es mal abgestürzt ist. Dedn hast du wohl nicht gemeint,oder?
Gruß,
Mathias

Ok, ich habe watchexec gefunden :slight_smile:

Hallo zusammen,
Dank Dorians Tipp mit watchdog habe ich es so gelöst:

  1. watchexec installieren:
    lade das deb-Paket herunter: https://github.com/watchexec/watchexec/releases/download/cli-v1.17.1/watchexec-1.17.1-x86_64-unknown-linux-gnu.deb
    und installiere es mit dpkg -i watchexec-1.17.1-x86_64-unknown-linux-gnu.deb

  2. Ich habe das Verzeichnis /etc/linuxmuster-linuxclient7/scripts mit mkdir -p /etc/linuxmuster-linuxclient7/scripts angelegt. In diesem Verzeichnis möchte ich alles Skripte ablegen, die in keines der anderen Verzeichnisse passen. Im Augenblick ist das ein Skript.

  3. Das Skript /etc/linuxmuster-linuxclient7/scripts/checkMonitors.sh mit folgendem Inhalt anlegen:

    #!/bin/bash
    #Wird von watchexec aufgerufen und checkt, ob monitors.xml copiert werden muss
    cp $HOME/.config/monitors.xml $HOME/media/$USER/Einstellungen/monitors.xml

  4. Das Skript /etc/linuxmuster-linuxclient7/onLogin.d/30_Monitor.sh mit folgendem Inhalt anlegen:

    #!/bin/bash
    #Monitorprofile
    if [ -e $HOME/media/$USER/Einstellungen/monitors.xml ]; then
    cp $HOME/media/$USER/Einstellungen/monitors.xml $HOME/.config/monitors.xml
    else
    mkdir -p $HOME/media/$USER/Einstellungen
    cp $HOME/.config/monitors.xml $HOME/media/$USER/Einstellungen/monitors.xml
    fi
    #Monitor-Watchdog
    /usr/bin/watchexec -w .config/monitors.xml /etc/linuxmuster-linuxclient7/scripts/checkMonitors.sh &

Das war’s …
Gruß,
Mathias

4 „Gefällt mir“