Login
Newsletter
Werbung

Mo, 13. August 2007, 00:00

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.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung