Image Konfigurationsmöglichkeiten Übersicht?

Hi zusammen,

gibt es eine Übersicht, wie man sein Linux/Windows client konfigurieren kann.
Ich kann mich an zig Möglichkeiten erinnern und sie gerne hier auch aufzählen.

Aber momentan beschäftigt mich ein „neues“ Problem und ich suche nach einer Lösung, die am besten zukunftstragend ist (KISS-Prinzip):

Wir haben PCs in Klassenzimmern identisch, aber unterschiedlich verwendet:

  • deren Soundausgabe ist analog an Lautsprecher angeschlossen.
  • deren Soundausgabe ist über HDMI - geschleift über ELMO - an Lautsprecher angeschlossen.

Ich weiß, wie ich meinem Linuxclient per Befehl beibringe, den entsprechenden Ausgang vorauszuwählen, weil das standardmäßig nicht klar ist:

pactl set-card-profile 0 output:hdmi-stereo-extra1

bzw.

pactl set-card-profile 0 output:analog-stereo

Möglichkeiten

  • verschiedene Images und linuxadmin vorauswählen (worst possible)
  • ein image, die Vorauswahl über ein postsync-skript je nach hostname oder Hardwareklasse anpassen (wird in LINBO nicht gehen, weil man das mit den pactl-tools des Clients machen muss)
  • ein Image, Vorauswahl über ein vom postsync-skript abgelegtes Skript im Dateisystem. Hier gibt es wieder zig möglichkeiten:
    • ~linuxadmin/.config/autostart/
    • /etc/xdg/autostart/
    • Config/login-skripte der Displaymanager lightdm, gdm, sddm
  • ein Image, Vorauswahl über das serverweite logon-skript /srv/samba/username/sysvol/meine-schule.de/scripts/default-school/custom/linux/logon.sh bzw. sessionstart.sh oder der Ort auf dem Server /var/lib/samba/sysvol/meine-schule.de/scripts/default-school/custom/linux/
    • wenn man linuxmuster-linuxclient7 nachvollzieht landet man über ein autostart im Benutzerverzeichnis auch bei /etc/linuxmuster-linuxclient7/onSessionStarted.d/, wo man am besten so was ablegt, wenn ich es richtig verstanden habe.
    • und wenn ich weiter richtig den output verstehe, wäre sessionstart.sh im sysvol-Verzeichnis dann das entsprechende auf dem Server.
  • vielleicht kann das lmlcc ? oder etwas anderes, was @martin.res so programmiert?

sysvol-logon Methode

Ich gehe mal davon aus, dass ich es gerne mit der sysvol/.../logon.sh oder sessionstart.sh Methode machen würde, ist vielleicht am nachhaltigsten verständlich dokumentiert… vielleicht.

Wie kann ich deren Einsatz debuggen? Ich würde gerne testen, was das Skript tut, ohne mich jedes Mal einloggen und ausloggen zu müssen… wie geht das? Wenn ich das Skript eingeloggt als User ausführe, sagt es:

[DEBUG] Saving export 'no_proxy=127.0.0.0/8,10.0.0.0/8,192.168.0.0/16,172.16.0.0/12,localhost,.local,.meine-schule.de' to tmp file
[ERROR] lmn-export and lmn-unset may only be used inside of linuxmuster-linuxclient7 hooks!

Ich kann aber beispielsweise manuell ausführen:

/usr/share/linuxmuster-linuxclient7/scripts/onSessionStarted
...

Damit könnte ich debuggen.

linuxmuster-linuxclient7 hook-skripte

Nachdem ich diese wieder mal entdeckt habe:

/etc/linuxmuster-linuxclient7/onBoot.d
/etc/linuxmuster-linuxclient7/onLoginAsRoot.d
/etc/linuxmuster-linuxclient7/onLogin.d
/etc/linuxmuster-linuxclient7/onLogoutAsRoot.d
/etc/linuxmuster-linuxclient7/onSessionStarted.d
/etc/linuxmuster-linuxclient7/onShutdown.d

könnte ich diese verwenden und schauen, welches Unterverzeichnis besser passt. Das würde ich dann aber wieder per postsync oder Umgebungsvariable anpassen müssen.

Whats your take on this?

Grüße, Tobias

EDIT: ich habe jetzt durch testen und probieren ../sysvol/.../sessionstart.sh ins Auge gefasst und entsprechend meinen ersten Post angepasst, aber das kann ja im Auge des Betrachters liegen, was die bessere Variante ist.

Hallo Tobias,

ich würde per postsync ein script in dieses Verzeichnis legen:

/etc/linuxmuster-linuxclient7/onBoot.d

je nach Rechnernamen oder Rechnergruppe.
Für genau sowas ist ja der postsync da und ausgeführt wird das dann beim booten durch den linuxmuster-client.
Sollte das zu früh sein (beim Boot), dann geht das eben in onLogin.

… wahrscheinlich kannst du das aber auch einfach machen, indem du eine /etc/rc.local hinsyncen läßt durch den postsync.
So mache ich es, rechnerartabhängig (Hardwareklasse) mittels postsync für die automatische WLAN Verbindung meiner Clients. Das muss ich unterscheiden, weil der netbefehl den Devicenamen kennen muss, und der heißt unterschiedlich bei den verschiedenen Geräten (Lenovo T540, Travelmate, Yoga).
Funktioniert seit Jahren ohne Probleme komplett über den postsync. Die rc.local wird von linux selbst beim boot ausgeführt: selbst wen sie es „erstmal“ nicht mehr gibt (bei ubuntu 22.04 und debian12). Denen war es aber egal: als sie da lag, wurde sie auch verwendet.

LG
Holger

1 „Gefällt mir“

Hallo Tobias,
ich würde auch per postsync Scripte in die linuxmuster-linuxclient hook-Verzeichenisse legen.
Je nach Verzeichnis werden aber die Scripte abgearbeitet, bevor das System die Sound-Ausgabe oder den Displaymanager startet. Damit würden dann deine Einstellungen nicht wirksam. Soviel ich weiß hat der X-Server/Displaymanager auch Konfigurationsdateien, wo man einen default setzen kann.
(den lmlcc gibts nicht mehr)
LG
Martin

1 „Gefällt mir“

Hallo Tobias,
ich haben das für die ButtonBar so gemacht, dass es in /usr/local/bin ein per postsync aktuell gehaltenes Script gibt, in das ich dann in einer case-Abfrage auf den Rechnernamen eben das gewünschte setze. Der Vorteil für mich darin ist, dass ich alle configs in einer Datei habe und eben auch nur in dieser Datei (neben der devices.csv) Rechner einzeln pflegen muss.
LG
Max

Hi @baumhof , @maxEG , @martin.res ,

Danke!

ich habe jetzt noch eine Möglichkeit gefunden/implementiert… mal sehn wann ich die wieder rückabwickele:

in devices.csv schreibe ich in den sophomorix-comment rein HDMI2 und dann habe ich das script in /var/lib/samba/sysvol/meine-schule.de/scripts/default-school/custom/linux/sessionstart.sh so geschrieben, dass es den Kommentar aus der Environmentvariable Computer_sophomorixComment „rausgrept“ und dementsprechend setzt.

  • Setzt natürlich voraus, dass diese Variable immer korrekt gesetzt wird.
  • Hat den Vorteil, dass ich alles in devices.csv pflegen kann.
hdmistr="HDMI2"
#$Computer_sophomorixDnsNodename = "r214-pc" 

if [[ $Computer_sophomorixComment == *${hdmistr}* ]]; then
    echo "## Setze Soundkarte auf HDMI"
    pactl set-card-profile 0 output:hdmi-stereo-extra1
else
    echo "## Setze Soundkarte nicht"
fi