Starten Sie die X-Anwendung automatisch aus dem schreibgeschützten Dateisystem

7

Um die SD-Karte in einer Anwendung zu schützen, die einen plötzlichen Stromausfall erleiden kann, versuche ich, den Root im schreibgeschützten Modus zu mounten.

Im funktionierenden (Lese- / Schreib-) System wird unsere Vollbildanwendung durch die automatische X-Anmeldung gestartet, die ein LXDE-Autostart-Skript ausführt.

Ich habe das System hauptsächlich über die zuvor vorgeschlagene Tabelle / etc / fstab ausgeführt :

proc            /proc            proc    defaults                   0       0
/dev/mmcblk0p1  /boot            vfat    defaults                   0       2
/dev/mmcblk0p2  /                ext4    defaults,noatime           0       1
tmpfs           /tmp             tmpfs   defaults,noatime,mode=1777 0       0
tmpfs           /var/log         tmpfs   defaults,noatime,mode=0755 0       0
tmpfs           /var/lock        tmpfs   defaults,noatime,mode=0755 0       0

Mein Problem besteht darin, die X-Anwendung zum Laufen zu bringen. LXDE beschwert sich darüber, dass keine .xauthority- Datei erstellt werden kann. Also habe ich den folgenden Kludge hinzugefügt (beachten Sie den Zugriffsmodus!):

tmpfs           /var/lib/lightdm tmpfs   defaults,noatime,mode=1777 0       0

Leider funktioniert der Autostart immer noch nicht und ich starre auf den hellgrünen Bildschirm. Wenn ich versuche, mich schnell anzumelden, kehre ich zur gleichen Eingabeaufforderung zurück, und seltsamerweise scheinen die Protokolle nicht zu sagen, was der Fehler sein könnte.

Mein nächster Versuch war, auf den Fenstermanager vollständig durch eine benutzerdefinierte .xsession oder .xinitrc zu verzichten . Während dies bei der manuellen Ausführung von startx funktioniert , meldet es sich nicht automatisch für den pi- Benutzer an. Ich befürchte, dass meine Versuche, mit dem globalen / etc / X11 / xinit / xinitrc herumzuspielen, ebenfalls wenig Erfolg hatten.

Die nächste Idee war, das Standard- Lightdm-Greeter- Skript durch Verknüpfen mit dem Autostart- Skript in / usr / share / xgreeters und Bearbeiten der Datei /ect/ligthdm/ligthdm.conf durch alternative Einstellungen für Greeter-Benutzer und Greeter-Sitzung zu ersetzen . Dies schlägt mit der Meldung "Greeter Closed Communication Channel" fehl. Vermutlich gibt es ein Protokoll, das von einem richtigen Begrüßer implementiert werden soll.

Irgendwelche Vorschläge? Ich vermute, dass dies für jeden, der Erfahrung mit der Unix-Administration hat, ein Kinderspiel ist, aber ich muss meinen Kopf gegen eine Wand schlagen.

Doynax
quelle
1
hast du es geschafft
Folkert van Heusden
Nein, ich muss zugeben, dass ich es nicht getan habe. Ich habe schließlich einfach aufgegeben und das System mit einem Lese- / Schreib-Dateisystem ausgeführt. Jetzt frage ich mich nur, wie lange es dauern wird, bis ich den ersten Fehlerbericht eines abgestürzten Systems
erhalte

Antworten:

2

Ich habe verschiedene Dinge getan. Es wird automatisch mit dem Account-Kiosk gestartet

Katze / Zuhause / Kiosk / Kioskstartup
#! / bin / sh
xset -dpms
xset s off
Unordnung &
matchbox-window-manager -use_cursor no -use_titlebar no &
midori -e Vollbild -a http://127.0.0.1:4079/index.html

cat /home/kiosk/.profile
# ~ / .profile: Wird vom Befehlsinterpreter für Login-Shells ausgeführt.
# Diese Datei wird von bash (1) nicht gelesen, wenn ~ / .bash_profile oder ~ / .bash_login
# existiert.
# Beispiele finden Sie unter / usr / share / doc / bash / examples / startup-files.
# Die Dateien befinden sich im bash-doc-Paket.

# Die Standard-Umask ist in / etc / profile festgelegt. zum Einstellen der Umask
# Installieren und konfigurieren Sie für ssh-Anmeldungen das libpam-umask-Paket.
#umask 022

# wenn bash ausgeführt wird
if [-n "$ BASH_VERSION"]; dann
    # .bashrc einschließen, falls vorhanden
    if [-f "$ HOME / .bashrc"]; dann
    . "$ HOME / .bashrc"
    fi
fi

# setze PATH so, dass es den privaten Bin des Benutzers enthält, falls vorhanden
if [-d "$ HOME / bin"]; dann
    PATH = "$ HOME / bin: $ PATH"
fi
xinit ./kioskstartup

cat /usr/share/xsessions/matchbox.desktop
[Desktop-Eintrag]
Codierung = UTF-8
Name = Streichholzschachtel
Kommentar = Diese Sitzung meldet Sie bei Matchbox an
Exec = Matchbox-Sitzung
Terminal = Falsch
Symbol =
Typ = Anwendung

Darüber hinaus habe ich die betroffenen Startskripte so geändert, dass sie nicht in / var schreiben, sondern stattdessen / tmp-Verzeichnisse erstellt und dort Daten abgelegt ...

    chmod 777 / tmp / run
fi

wenn [ ! -d / tmp / cache]
dann
    mkdir / tmp / cache
    chmod 777 / tmp / cache
fi

wenn [ ! -d / tmp / cache / lighttpd]
dann
    mkdir / tmp / cache / lighttpd
    chmod 777 / tmp / cache / lighttpd
fi
wenn [ ! -d / tmp / log]
dann
    mkdir / tmp / log
    chmod 777 / tmp / log
fi
wenn [ ! -d / tmp / log / lighttpd]
dann
    mkdir / tmp / log / lighttpd
    chmod 777 / tmp / log / lighttpd
fi

PATH = / sbin: / bin: / usr / sbin: / usr / bin
DAEMON = / usr / sbin / lighttpd
NAME = lighttpd
DESC = "Webserver"
PIDFILE = / tmp / run / $ NAME.pid
SCRIPTNAME = / etc / init.d / $ NAME

DAEMON_OPTS = "- f /etc/lighttpd/lighttpd.conf"

test -x $ DAEMON || Ausfahrt 0

setze -e

check_syntax ()
{
    $ DAEMON -t $ DAEMON_OPTS> / dev / null || $ verlassen?
}}

if ["$ 1"! = status]; dann
    # Stellen Sie sicher, dass es ein / tmp / run / lighttpd gibt, auch mit tmpfs
    # Das Verzeichnis ist als flüchtig definiert und daher möglicherweise nicht vorhanden
    # nach einem Boot (DPM §9.3.2)
    wenn ! dpkg-statoverride --list / tmp / run / lighttpd> / dev / null 2> & 1; dann
        installiere -d -o www-data -g www-data -m 0750 "/ tmp / run / lighttpd"
    fi
fi

. / lib / lsb / init-Funktionen

Fall "$ 1" in
    Start)
    check_syntax
        log_daemon_msg "$ DESC wird gestartet" $ NAME
        wenn ! start-stop-daemon --start --oknodo --quiet \
            --pidfile $ PIDFILE --exec $ DAEMON - $ DAEMON_OPTS
        dann
            log_end_msg 1
        sonst
            log_end_msg 0
        fi
        ;;
    halt)
        log_daemon_msg "$ DESC stoppen" $ NAME
        if start-stop-daemon --stop --retry 30 --oknodo --quiet \
            --pidfile $ PIDFILE --exec $ DAEMON
        dann
            rm -f $ PIDFILE
            log_end_msg 0
        sonst
            log_end_msg 1
        fi
        ;;
    reload | force-reload)
    check_syntax
        log_daemon_msg "$ DESC-Konfiguration neu laden" $ NAME
        if start-stop-daemon --stop --signal INT --quiet \
            --pidfile $ PIDFILE --exec $ DAEMON
        dann
            rm $ PIDFILE
            if start-stop-daemon --start --quiet \
                --pidfile $ PIDFILE --exec $ DAEMON - $ DAEMON_OPTS; dann
                log_end_msg 0
            sonst
                log_end_msg 1
            fi
        sonst
            log_end_msg 1
        fi
        ;;
    Protokolle erneut öffnen)
        log_daemon_msg "$ DESC-Protokolle erneut öffnen" $ NAME
        if start-stop-daemon --stop --signal HUP --oknodo --quiet \
            --pidfile $ PIDFILE --exec $ DAEMON
        dann
            log_end_msg 0
        sonst
            log_end_msg 1
        fi
        ;;
    neu starten)
    check_syntax
        $ 0 Stop
        $ 0 starten
        ;;
    Status)
        status_of_proc -p "$ PIDFILE" "$ DAEMON" lighttpd && exit 0 || $ verlassen?
        ;;
    *)
        echo "Verwendung: $ SCRIPTNAME {start | stop | restart | reload | force-reload | status}"> & 2
        Ausfahrt 1
        ;;
esac

Ausfahrt 0

Als letztes habe ich LXDE total losgeworden und bin zum Fensterkragen oben gegangen. Ich habe lighttpd anstelle von monkey als Webserver verwendet, da es Aliase richtig unterstützt. Mein Browser ist Midori.

Diese Konfiguration benötigt ein wenig Arbeit, aber es funktioniert!

user8925
quelle
0

Versuchen Sie es sudo chmod 777 /tmpund auch, /varwenn etwas anderes fehlschlägt.

In meinem Fall war es das einzige, was ich tun musste.

user221931
quelle
0

Es ist wichtig zu verstehen, dass das Dateisystem rwzum Zeitpunkt eines Absturzes nicht beschädigt wird . Es wird aufgrund eines unvollendeten Schreibvorgangs zum Zeitpunkt eines Absturzes beschädigt. Wenn kein Schreibvorgang ausgeführt wird, ist Ihr rwDateisystem so sicher wie roeines.

Ich schlage daher vor, dass Sie Ihr Dateisystem verlassen rw, das Journaling aktivieren und sich keine Sorgen mehr machen. Wenn der einzige verbleibende Schreibvorgang das Erstellen der .xauthorityDatei beim Booten ist, ist die Wahrscheinlichkeit, dass genau in diesem Moment ein Absturz auftritt, bereits sehr gering, und selbst in diesem Fall wird das Problem durch Journalling höchstwahrscheinlich behoben, ohne dass Sie es bemerken.

Persönliche Anekdote:

Ich habe einen SBC ohne Kopf (nicht genau Ihr Fall, aber immer noch), der als WLAN-Router verwendet wird. Meine Mutter, die von Elektrizität besessen ist, zieht jeden Abend den Stecker und steckt ihn morgens wieder ein. Das Root-Dateisystem ist rw, aber das Ding läuft seit Monaten ohne Probleme.

Dmitry Grigoryev
quelle