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…
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?
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
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.
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.
#!/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
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…
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.
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.
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
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.
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
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 &