Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| — | anwenderwiki:linuxclient:offlineusage [2014/11/07 23:38] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | {{tag> }} | ||
| + | |||
| + | ====== Wie man einen Linuxclient offline nutzen kann ====== | ||
| + | |||
| + | Gedanken zum Setup: | ||
| + | * linuxmuster-client pakete sind installiert | ||
| + | * Variante 1: Auswahl per Linbo/Grub | ||
| + | * offline Nutzung wird explizit beim Booten über GRUB-Menü ausgewählt. Nutzung sollte offline bleiben bis zum Reboot (iptables) | ||
| + | * postsync script schiebt verschiedene Dateien hin, um offline nutzung zu ermöglichen | ||
| + | * Variante 2: Automatisches Erkennen, ob man sich im GRÜNEN Netz befindet (ping server) | ||
| + | * falls offline erkannt wird: automatisches Login im X-Server mit lokalem Nutzerkonto, | ||
| + | * Möglichkeit zum logoff, welches wiederum automatisch erkennen kann, ob man offline oder online ist | ||
| + | * login-Prozess sollte möglichst alle linuxmuster-client Schritte ausführen | ||
| + | |||
| + | |||
| + | ===== Variante 2: Automatische Offline-Erkennung mit linuxmuster-client-extras ===== | ||
| + | |||
| + | == Einschränkungen == | ||
| + | * Untenstehendes wurde momentan nur für lightdm-Windowmanager und Xubuntu 12.04 getestet. | ||
| + | |||
| + | == Bootkonfiguration == | ||
| + | Beim Bootvorgang, | ||
| + | Dementsprechend die X-Session konfigurieren. | ||
| + | Ebenso z.B. den Profilbenutzer auf den lokalen synchronisieren. | ||
| + | <code bash / | ||
| + | #!/bin/sh -e | ||
| + | |||
| + | sleep 10 | ||
| + | / | ||
| + | </ | ||
| + | |||
| + | == Konfiguration == | ||
| + | findet in einem File statt. Passwort ist der crypt-hash, der sich durch Passwortänderung (hier: " | ||
| + | <code bash / | ||
| + | #!/bin/sh | ||
| + | |||
| + | offlineuserenabled=" | ||
| + | offlineuser=" | ||
| + | offlineuserpw=' | ||
| + | offlinetargetdir="/ | ||
| + | </ | ||
| + | |||
| + | == Status Offlineity == | ||
| + | findet sich in der Existenz der Datei ''/ | ||
| + | |||
| + | == Zwei verschiedene lightdm Konfigurationen == | ||
| + | <code none / | ||
| + | [SeatDefaults] | ||
| + | greeter-session=lightdm-gtk-greeter | ||
| + | user-session=xubuntu | ||
| + | allow-guest=false | ||
| + | greeter-hide-users=true | ||
| + | session-cleanup-script=/ | ||
| + | </ | ||
| + | |||
| + | <code none / | ||
| + | [SeatDefaults] | ||
| + | greeter-session=lightdm-gtk-greeter | ||
| + | user-session=xubuntu | ||
| + | allow-guest=false | ||
| + | greeter-hide-users=true | ||
| + | # | ||
| + | session-cleanup-script=/ | ||
| + | autologin-user=%offlineuser% | ||
| + | autologin-user-timeout=0 | ||
| + | # | ||
| + | </ | ||
| + | Leider funktioniert bei mir der pam-service " | ||
| + | Also muss man ''/ | ||
| + | Alternative ist per Befehl " | ||
| + | |||
| + | <code none / | ||
| + | #%PAM-1.0 | ||
| + | auth requisite | ||
| + | auth required | ||
| + | auth optional | ||
| + | @include common-account | ||
| + | session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close | ||
| + | session required | ||
| + | @include common-session | ||
| + | session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open | ||
| + | session required | ||
| + | session required | ||
| + | @include common-password | ||
| + | </ | ||
| + | |||
| + | == Entsprechendes Skript zum Offlinetest und zur Vorbereitung des Kontos == | ||
| + | <code bash / | ||
| + | #!/bin/bash | ||
| + | # | ||
| + | # linuxmuster-client-offline | ||
| + | # | ||
| + | # Tobias Küchel 2014, < | ||
| + | # 04.11.2014 | ||
| + | # GPLv2 | ||
| + | |||
| + | . / | ||
| + | |||
| + | [ " | ||
| + | |||
| + | # files involved: | ||
| + | # / | ||
| + | # | ||
| + | # -> session-cleanup-script=/ | ||
| + | # / | ||
| + | # / | ||
| + | # linuxmuster-client-extras-setup --type login --order 020 --on / | ||
| + | # leoclient-vm-printer.conf | ||
| + | # run-vm-printer-splitter | ||
| + | # run-vm-printer-spooler | ||
| + | |||
| + | # functions | ||
| + | log_msg() { | ||
| + | logger -t check-offlineity " | ||
| + | } | ||
| + | |||
| + | STATUSFILE=/ | ||
| + | PROFILE_USER=linuxadmin | ||
| + | HOMEDIR=/ | ||
| + | |||
| + | ## save the old status of offlineity | ||
| + | [ -e $STATUSFILE ] && OLDSTATUS=1 || OLDSTATUS=0 | ||
| + | log_msg " | ||
| + | |||
| + | ## | ||
| + | ## check if we are offline | ||
| + | ## | ||
| + | if ! ping -c 1 10.16.1.1 >/ | ||
| + | ## we should be offline | ||
| + | echo 1 > $STATUSFILE | ||
| + | else | ||
| + | ## we should be online, revert changes | ||
| + | rm -f $STATUSFILE | ||
| + | fi | ||
| + | |||
| + | ## Debugging FORCE offline | ||
| + | #echo 1 > $STATUSFILE | ||
| + | #printenv >> / | ||
| + | |||
| + | ## | ||
| + | ## check, if change is needed | ||
| + | ## | ||
| + | restart=0 | ||
| + | if [ -e $STATUSFILE -a $OLDSTATUS -eq 0 ]; then | ||
| + | restart=1 | ||
| + | fi | ||
| + | if [ ! -e $STATUSFILE -a $OLDSTATUS -eq 1 ]; then | ||
| + | restart=1 | ||
| + | fi | ||
| + | if [ -n " | ||
| + | restart=1 | ||
| + | log_msg " | ||
| + | fi | ||
| + | ## no change needed, get out | ||
| + | [ $restart -eq 0 ] && { log_msg "No change needed."; | ||
| + | |||
| + | log_msg " | ||
| + | mkdir -p $offlinetargetdir | ||
| + | chown $offlineuser $offlinetargetdir | ||
| + | |||
| + | if [ -e $STATUSFILE ]; then | ||
| + | log_msg "Seem to be offline. Change to offline." | ||
| + | # | ||
| + | pw=" | ||
| + | ## Repair leoclient-vm-printer | ||
| + | log_msg "Fix leoclient-vm-printer to point to Home_lokal" | ||
| + | sed -i " | ||
| + | log_msg " | ||
| + | iptables -A OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP | ||
| + | log_msg " | ||
| + | unlink / | ||
| + | sed -i " | ||
| + | ln -s / | ||
| + | else | ||
| + | log_msg "Seem to be online. Change to online." | ||
| + | pw=" | ||
| + | ## Repair leoclient-vm-printer | ||
| + | log_msg "Fix leoclient-vm-printer to point to Home_auf_Server" | ||
| + | sed -i " | ||
| + | log_msg " | ||
| + | iptables -D OUTPUT -p all -m owner --uid-owner $offlineuser -j DROP | ||
| + | unlink / | ||
| + | ln -s / | ||
| + | fi | ||
| + | |||
| + | ## replace the lehrer pw | ||
| + | log_msg " | ||
| + | sed -i " | ||
| + | |||
| + | ## workaround fast VNC | ||
| + | log_msg " | ||
| + | sed -i ' | ||
| + | |||
| + | ## | ||
| + | ## Restart X and lightdm, if status changed | ||
| + | ## | ||
| + | |||
| + | ## if the service is running, grep returns 0, then stop lightdm | ||
| + | if service lightdm status | grep running >/ | ||
| + | service lightdm stop | ||
| + | sleep 2 | ||
| + | fi | ||
| + | |||
| + | ## workaround: printer-spooler stays after logout | ||
| + | pkill ' | ||
| + | |||
| + | ## Sync the PROFILE_USER to the offlineuser | ||
| + | ## This only works, if the $offlineuser is not logged in, thus when lightdm is down | ||
| + | log_msg " | ||
| + | rsync -rlpt --force --delete / | ||
| + | chown -R $offlineuser: | ||
| + | |||
| + | ## now start (again) | ||
| + | service lightdm start | ||
| + | </ | ||
| + | |||
| + | == Loginskripte beim X Login == | ||
| + | Beim Login wollen möglicherweise einige Skripte aus ''/ | ||
| + | Dies ist lokalen Benutzern verboten, kann aber über '' | ||
| + | Natürlich macht das nur für die Skripte Sinn, die kein Netzwerk/ | ||
| + | |||
| + | < | ||
| + | # linuxmuster-client-extras-setup --type login --order 020 --on / | ||
| + | </ | ||
| + | |||
| + | <code bash / | ||
| + | #!/bin/bash | ||
| + | # | ||
| + | # Tobias Küchel | ||
| + | # | ||
| + | # with code from | ||
| + | # frank@linuxmuster.net | ||
| + | # | ||
| + | # 15.04.2012 | ||
| + | # GPL v2 | ||
| + | # | ||
| + | |||
| + | # default value for PROFILE_USER | ||
| + | PROFILE_USER=" | ||
| + | # if the package linuxmuster-client-profile is installed, | ||
| + | # configuration is stored in / | ||
| + | if [ -f / | ||
| + | . / | ||
| + | # source profile functions | ||
| + | #. / | ||
| + | fi | ||
| + | |||
| + | . / | ||
| + | |||
| + | ## proceed, if offline | ||
| + | if [ ! -e / | ||
| + | exit 0 | ||
| + | fi | ||
| + | |||
| + | # args | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | USER=" | ||
| + | HOMEDIR="/ | ||
| + | # | ||
| + | |||
| + | # functions | ||
| + | log_msg() { | ||
| + | logger -t setup-offlineuser " | ||
| + | } | ||
| + | |||
| + | ## Problem: | ||
| + | ## Grundsätzlich sollte linuxadmin -> $offlineuser schon mal gesynct sein, | ||
| + | ## sonst funktioniert das login nicht, weil diese Skripte hier nicht | ||
| + | ## wie die pam_mount scripte vor dem eigentlichen Login ausgeführt werden, | ||
| + | ## sondern erst nach dem login beim autostart | ||
| + | ## Lsg: beim Booten sync. starten in / | ||
| + | |||
| + | log_msg " | ||
| + | echo " | ||
| + | chown $USER:$USER $HOMEDIR/ | ||
| + | ## replace the Home_auf_Server Folder in the config if not done yet | ||
| + | WINXP=`echo $HOMEDIR/ | ||
| + | if [ -e $WINXP ]; then | ||
| + | log_msg " | ||
| + | sed -i "/ | ||
| + | fi | ||
| + | |||
| + | log_msg " | ||
| + | [ ! -e / | ||
| + | ## remove Home_auf_Server | ||
| + | [ -e / | ||
| + | ## remove Desktop-link | ||
| + | [ -e / | ||
| + | ## add Desktop-link | ||
| + | if [ ! -e / | ||
| + | mkdir -p / | ||
| + | cp / | ||
| + | sed -i " | ||
| + | sed -i " | ||
| + | chown $offlineuser / | ||
| + | fi | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | == Ausloggen == | ||
| + | Beim Ausloggen sollte der offline-zustand resetted werden, dies geschieht über die cleanup-skripte in den lightdm-Konfigurationen. | ||
| + | |||