Automatisches Login per USB-Stick
Login für mehrere Benutzer mit pamusb
Hat sich dann ein Benutzer erfolgreich identifiziert, wird der Display-Manager vorbereitet. D.h. in der Konfigurationsdatei wird der Autologin aktiviert und der Autologin Benutzer eingetragen. Letztendlich wird der Display-Manger gestartet und das Skript beendet sich.
Nicht vergessen, die Datei ausführbar zu machen: chmod +x /usr/local/bin/loginusb2
Nun ergibt sich ein Problem: Wenn das Skript zuerst gestartet wird, kann man fbi zum Anzeigen des Bildes erst starten, wenn das Skript fertig ist. Wenn das Skript fertig ist, ist der Login aber schon vollzogen, das Bild also sinnlos.
Andersherum ist es ähnlich. Da fib ein Programm ist, wird das nachfolgende Programm in der init-Liste erst gestartet, wenn man fib beendet. Auch das ist nicht Sinn der Sache. Also werden das Login-Skript und fbi über ein zweites Skript im Hintergrund gestartet (das muss auf diese Weise gelöst werden, da man init-Skripte nicht im Hintergrund starten kann).
Dafür legen wir die Datei /usr/local/bin/loginusb anlegen, machen sie ausführbar und schreiben folgendes hinein:
#!/bin/bash /usr/local/bin/loginusb2 & while true; do fbi --noverbose /root/loginusb.jpg done
Die while-Schleife fängt den Fall ab, dass ein Benutzer fbi mit [q] beendet. In dieser Situation wird es einfach wieder neu gestartet.
Damit das Skript beim Starten ausgeführt wird, muss es in das init-System integriert werden (das z nach S99 ist wichtig, damit das Skript als letztes gestartet wird!):
ln -s /usr/local/bin/loginusb /etc/rc2.d/S99zloginusb
Ohne Framebuffer
Das Ganze geht auch ohne Framebuffer, wenn man ein anderes Aussehen bevorzugt. Zuerst muss der Link /etc/rc2.d/S99zloginusb auf loginusb2 zeigen und nicht auf loginusb:
ln -s /usr/local/bin/loginusb2 /etc/rc2.d/S99zloginusb
Zweitens muss loginusb2 bearbeitet werden. Da fbi nicht mehr gestartet wird, muss es auch nicht beendet werden. Außerdem sollte noch eine kurze Nachricht erscheinen, damit der Benutzer weiß, was passiert. Das Resultat steht als loginusb2_ohne_fb zum Download bereit.
#!/bin/bash IFS=" " Y=1 clear echo "Willkommen" echo "Bitte identifizieren Sie sich mit Ihrem USB-Stick!" echo "Warte auf USB-Stick..." while [ $Y == 1 ]; do for X in `grep "<user id=" /etc/pamusb.conf | cut -d "\"" -f 2 | cut -d "\"" -f 1`; do if [ $X != "root" ] && [ $X != "scox" ]; then pamusb-check --quiet $X if [ $? == 0 ]; then Y=2 echo "USB-Stick identifiziert. Sie werden angemeldet..." #Beispiel-Konfiguration für den Display-Manager kdm: sed -i "s/\(^AutoLoginUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc sed -i "s/\(^NoPassUser=\).*/\1$X/" /etc/kde3/kdm/kdmrc sed -i "s/\(^NoPassEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc sed -i "s/\(^AutoLoginEnable=\).*/\1true/" /etc/kde3/kdm/kdmrc sed -i "s/\(^AutoLoginLocked=\).*/\1false/" /etc/kde3/kdm/kdmrc /etc/init.d/kdm start & #Beispiel-Konfiguration für den Display-Manager gdm: sed -i "s/\(^AutoLoginUser=\).*/1$X/" /etc/gdm/gdm.conf-custom sed -i "s/\(^AutoLoginEnable=\).*/1true/" /etc/gdm/gdm.conf-custom /etc/init.d/gdm start & else sleep 2 fi fi done; done;
Natürlich muss der Eintrag vga=
wieder aus der Kernel-Zeile raus, ebensowenig braucht man für diese Methode das Programm fbi.