
ich arbeite an einem Deb-Paket, das es dem Administrator ermöglicht, ein weiteres Konto zu erstellen und dieses Konto automatisch im Kioskmodus auszuführen. Ich habe den Benutzer erstellt, einen Kurzschlüssel angegeben und diesen in eine versteckte Datei eingefügt und ein .bash_profile-Skript für das Administratorkonto erstellt, das ich in den Home-Ordner des neuen Benutzers kopiere.
Dies ist das Skript, das ich ausführe, um die Dateien zu erstellen und die Tastenkombination anzugeben:
#!/bin/bash
basis="Primary + Alt + "
shortkey=`zenity --entry --text "Your shortkey will be a combination of <Primary> + <Alt> + a letter\n\n Specify your letter!"`
while [[ $shortkey = *[^A-Z]* ]];
do
zenity --warning --text "Input incorrect\n\nTry again"
shortkey=`zenity --entry --text "Your shortkey will be a combination of <Primary> + <Alt> + a letter\n\n Specify your letter!"`
done
basis="$basis$shortkey"
zenity --info --text "$basis" --title="Your shortkey"
touch kiosk/kiosk-0.1/.mykey
echo "gsettings set org.gnome.desktop.wm.keybindings close [$basis]" > kiosk/kiosk-0.1/.mykey
user=$(cat kiosk/kiosk-0.1/.username)
keys=$(cat kiosk/kiosk-0.1/keys)
content=$(cat kiosk/kiosk-0.1/.mykey)
touch kiosk/kiosk-0.1/.bash_profile
echo "#!/bin/bash" >> .bash_profile
echo "" >> .bash_profile
echo $keys >> .bash_profile
echo $content >> .bash_profile
chmod +x .bash_profile
chown $user .bash_profile
mv '.bash_profile' /home/$user
Der nach .bash_profile kopierte Inhalt enthält Code zum Deaktivieren aller Tasten der Schnittstelle, wie:
gsettings set org.gnome.desktop.wm.keybindings begin-move []
Jetzt habe ich nur noch eine Zeile hinzugefügt, um den Chromium-Browser auf der richtigen Website zu starten
/usr/bin/chromium-browser www.google.be --kiosk --no-default-browser-check --disable-translate
Ich habe auch den Besitzer des .bash_profile-Skripts in das Kontobenutzerkonto geändert und es ausführbar gemacht, bevor ich es in den Home-Ordner des neuen Benutzers kopiert habe.
Wenn ich mich jetzt als neuer Benutzer anmelde, passiert in diesem Skript nichts. Kann jemand erkennen, wo ich falsch liege, oder mir bei der Lösung helfen?
Antwort1
Das Hauptproblem hierbei ist, dass es .bash_profile
bei einem grafischen Login nicht gelesen wird. Es handelt sich um eine Bash-spezifische Datei, die gelesen wird, wenn Sie eine Login-Shell starten, und ich bezweifle sehr, dass sie bei einem grafischen Login jemals gelesen wird.
Sie hätten bessere Chancen, wenn Sie ~/.profile
stattdessen verwenden würden. Dies wird i) von den meisten Anmelde-Shells gelesen, nicht nur von Bash, so dass Sie Ihren Benutzer nicht auf eine bestimmte Shell beschränken, und ii) ist die Wahrscheinlichkeit, dass es von einer grafischen Anmeldung gelesen wird, viel höher.
Ich habe das gerade überprüft und .profile
es wird tatsächlich unter Ubuntu 13.04 gelesen, wenn Sie sich grafisch anmelden. Sie können jedoch nicht davon ausgehen, dass dies immer der Fall sein wird. Weitere Einzelheiten finden Sie in Gilles‘ ausgezeichneter AntwortHier.
Nun ein paar kleinere Punkte. Es besteht keine Notwendigkeit für touch
, echo "foo" >> bar
wird die Datei erstellen, bar
wenn sie nicht existiert, und an sie anhängen, wenn sie existiert. Außerdem muss es nicht .bash_profile
ausführbar sein, die Datei wird als Quelle verwendet, nicht ausgeführt. Ich weiß nicht, ob das Probleme verursachen würde, aber es könnte sein.
Schließlich wird die Gruppe der Datei root sein, nicht die des Benutzers. Auch hier bin ich mir nicht sicher, ob das ein Problem ist, aber Sie können Ihrem Skript auch Folgendes hinzufügen:
chown $user:$user .profile
Beachten Sie, dass.profile
wird von Bash ignoriertwenn eine Datei mit dem Namen ~/.bash_profile
existiert. Dies sollte grafische Anmeldungen nicht beeinträchtigen, kann aber zu unerwartetem Verhalten führen, wenn Sie sich über die Befehlszeile anmelden.