mikrocontroller.net

Forum: PC Hard- und Software Linux - Beim Hochfahren als bestimmter User automatisch einloggen und Programm starten


Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es eigentlich möglich, das beim hochfahren ein bestimmter User 
eingeloggt wird ohne das der Benutzer ein Passwort eingeben muss und das 
ein bestimmtes Programm gestartet wird?
Wenn ja, wie?
Bei google habe ich nichts direkt finden können.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit windowmanager?

bei Gnome:
System -> Administration -> Login Window -> Security -> Enable Automatic 
Login

System -> Preferences -> Sessions -> Startup Programs

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Mit Window-Manager wäre gut.
Geht das mit beliebigen Usern? Und in Zusammenarbeit mit dem 
automatischen Start eines gewissen Programmes.
Was ich nämlich noch brauche ist, das der User eigentlich nichts weiter 
machen kann. Also auch nicht an weitere Menues herankommt. Terminal 
starten kann etc. D.h. der Rest der Oberfläche sollte nicht zugänglich 
sein.
Alternativ, könnte die Oberfläche auch mit tk programmiert werden.

Es geht hierbei weniger um wirkliche Sicherheitsgründe.
Es handelt sich eher um die Bedienoberfläche eines Rechners in der 
Fertigung. Die Benutzer sollen nur das Programm bedienen können und 
runterfahren. Da sie keine Ahnung haben, geht es eher darum zu 
verhindern, das sie unabsichtlich irgendwas blödes machen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll der Benutzer dann entsprechend in einem Terminal oder einer
Konsole eingeloggt bleiben und Kommandos ausführen können?
Vermutlich nicht, weil dann ja jeder ohne weitere Anmeldung Kommandos 
starten kann.

Ich vermute eher, daß einfach nur nach dem Start zusätzlich zu den
üblichen gestarteten Programmen dein gewünschtes laufen soll?
Das sollte z.B. gehen, indem in der /etc/inittab ein
entsprechender Eintrag gemacht wird.
Bei mir sieht die so aus:
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now

# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
#  <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Die Zahl in der Zeile "id:2:initdefault:" gibt an, welchen run level
(1-5) der Rechner anpeilt, wenn er hochfährt, hier also 2.
Genau für diesen Level (oder wahlweise für weiter, z.B. 2-4) kann
man dann eine Zeile ergänzen:
me:234:wait:meinkommando...
Die ersten Zeichen sind egal, sollten sich aber von den anderen
Labels unterscheiden. Angeblich dürfen hier 4 Zeichen stehen,
früher waren es nur 2.
Dann kommen die run level, bei deren Eintritt das Kommando starten
soll.
Das wait sagt, daß das Kommando einmal ausgeführt werden soll (mit
respawn würde es bei seinem Ende immer wieder gestartet werden)
und daß das Booten an der Stelle auf das Ende des Kommandos warten
soll (once würde auch einmal ausgeführt, aber ohne zu warten).
Dann kommt das auszuführende Kommando. Das soll ggf. ein sudo...
sein, damit der bestimmte Benutzer verwendet wird.

Ein anderer Weg ist (und etwas eleganter, aber auch komplizierter)
ist über den rc-Mechanismus (Skripte in /etc/init.d o.s.ä. je
nach Linux, letztlich aufgerufen über die l1-l5-Einträge in der
obigen Datei).
Die BEschreibung dieses Mechanismus spare ich mir, sie ist
z.B. in http://www.wachtler.de/skript_tools/node66.html
kurz beschrieben anhand eines anderen Beispiels.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Nez

Also sowas wie ein Kiosk Modus?
http://www.faqs.org/docs/Linux-HOWTO/Kiosk-HOWTO.html

Statt des Webbrowsers dann dein Userprogramm starten ODER dein 
Userprogramm aus dem Webbrowser heraus ausführen (Javascript, lokaler 
Webserver mit PHP, Python, Perl o.ä.)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach so, mein Text oben hat sich ja erledigt.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> ach so, mein Text oben hat sich ja erledigt.

Nicht unbedingt. Beides austesten und das bessere Verfahren nehmen. 
Auswahl zu haben ist meistens gut.

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus Wachtler
>Soll der Benutzer dann entsprechend in einem Terminal oder einer
>Konsole eingeloggt bleiben und Kommandos ausführen können?
>Vermutlich nicht, weil dann ja jeder ohne weitere Anmeldung Kommandos
>starten kann.
>Ich vermute eher, daß einfach nur nach dem Start zusätzlich zu den
>üblichen gestarteten Programmen dein gewünschtes laufen soll?
Ja. Genau. Der Benutzer soll keine eigenen Kommandos absetzen können, 
weder per Terminal noch per graphischer Oberfläche.
Er soll nur das Programm bedienen können und einer der Menüpunkte wird 
sein, den Rechner runterzufahren. (CTRL-ALT-DEL zum runterfahren wäre 
auch OK). Dämonen, Services und so weiter sollen normal laufen.

Deinen Script werde ich mal probieren.


@  Stefan B.
Ja. So in der Art wie ein Kiosk. Nur das das Programm etwas komplexer 
ist, weil des Peripherie bedienen muss. Aber das spielt wohl bei dem 
Link, den Du da gepostet hast keine Rolle.

Vielen Dank euch.

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Benutzer sind sehr wahrscheinlich vom Wissen her garnicht in der 
Lage gezielt Schaden anzurichten. Aber es sollte doch verhindert werden, 
das sie beim Rumspielen irgendwas verbiegen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das was ich beschrieben hatte, geht aber nicht unter der GUI sinnvoll.
Wenn es das sein soll, muß man wie bereits beschrieben dem gdm oder
dem kdm (geht bei beiden) ein automatisches Anmelden beibringen,
weiterhin einen Windowmanager dafür auswählen, der entsprechend
abgemagert werden kann (fvwm2, icewm) und das gewünschte Programm
z.B. über die Datei .xsession starten.

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus Wachtler

>das was ich beschrieben hatte, geht aber nicht unter der GUI sinnvoll.
Naja. Das wäre nicht wirklich ein Hinderniss. Ich kann das in C und 
Tcl/Tk programmieren. (Tcl/Tk weil ich schon etwas grafische 
Möglichkeiten brauche um z.B. eine Abgleichkurve anzuzeigen).
Das würde ja gleichermassen in einem Terminalfenster auf der GUI laufen.
Aber bei der GUI wäre halt das Problem das der Benutzer über die Menues 
etc. noch andere Kommandos absetzten könnte.
Darauf beziehst Du Dich wahrscheinlich mit:
>einen Windowmanager dafür auswählen, der entsprechend abgemagert werden >kann
Das stelle ich mir sehr aufwändig vor. Wie geht das im Prinzip? Müsste 
wahrscheinlich im Quelltext irgendwo ändern. Oder kann man das in 
Konfigurationsfiles ändern? (Wenn ich mal als root da was dran arbeiten 
möchte, würde ich gerne die normalen Möglichkeiten haben).

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ui. Da habe ich nicht aufgepasst. TK geht ja auch nicht auf der Konsole. 
Nur in der GUI.

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ist dann das Problem wie ich bei der GUI sämtliche anderen 
Menues/Befehle rausnehme und nur meine Applikation laufen lasse.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und da hängt es vom jeweiligen WM ab, was man wie abstellen kann.

Das Arbeiten als root wird bei allen gehen, indem man mit
Ctl-Alt-F1 (oder ...F2-F6) auf eine Konsole geht und sich dort
anmeldet.
Man kann auch aus der Konsole eine weitere X-Window-Sitzung starten.
Normalerweise ist ja auf Ctl-Alt-F1 bis Ctl-Alt-F6 jeweils eine
Textkonsole gestartet (siehe die /etc/inittab oben).
Unter der 7. Konsole findet sich dann die GUI mit X-Windows,
man kommt also mit Alt-F7 oder Ctl-Alt-F7 wieder ins X-Windows.
Hat man nun seinen DAU auf der 7. Konsole in der GUI,
wechselt mit Ctl-Alt-F1 auf die erste Textkonsole, meldet sich
dort an (z.B. als root), dann kann man mit
startx -- :1
ein zweites X-Windows starten, wenn alles korrekt eingerichtet
ist. Dann hat man wie gehabt auf den Konsolen 1-6 die
Textkonsolen, auf der 7. den DAU in seiner GUI und auf der
8. das zqweite X-WIndows als root. Mit Ctl-Alt-F7 und
Ctl-Alt-F8 kann man zwischen den beiden X-Windows wechseln.
Die beiden können unterschiedliche Windowmanager nutzen, also
z.B. der DAU auf der 7. hat seinen icewm, während der root
auf der 8. einen beliebigen anderen WM hat.

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und da hängt es vom jeweiligen WM ab, was man wie abstellen kann.

Hmm. Da muss ich mal schauen.

Die Bemerkung darüber das ich als root nach wie vor einem WM benutzen 
will, bezog sich darauf, das ich die nicht-abgespeckte Version brauche 
im Gegensatz zum DAU. (Welch böse Abkürzung :-) ).
Nicht das ich durch das abspecken überhaupt nur noch eben diese 
verminderte GUI habe.
Aber so richtig schlimm wäre das auch nicht. Auf der Konsole kann man ja 
auch alles machen.

Ein Hinweis auf Anleitungen wie ich gdm oder kdm abmagern kann, wäre 
noch hilfreich.

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal sehen wie weit ich mit dem Kiosk Link komme.
Sonst noch Tips?

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh oh. zur Klarstellung:

Du musst NICHT gdm oder kdm abmagern, sondern den Windowmanager,
der nach dem Einloggen läuft.


gdm oder kdm (oder theoretisch xdm) ist das Programm, das vor dem
Anmelden läuft und nach Name und PW fragt.
Als root kann man nach dem Anmelden eben dieses Programm konfigurieren
(zumindest bei kdm über Klickibunti im Program kcontrol).
Hier kann man jeweils einstellen, wie der Startbildschirm aussehen soll
oder eben, ob immer ein bestimmter Benutzer angemeldet werden soll
statt nach Name und PW zu fragen.
Ebenfalls im gdm oder kdm wird eingestellt, welcher Windowmanager
für den jeweiligen Benutzer NACH dem Anmelden laufen soll (bzw.
kann man das über die Startskripte von X11 einstellen; siehe
man xsession).
Das wiederum kann unabhängig vom gdm oder kdm einer der folgenden sein:
- KDE
- gnome
- icewm
- fvwm
- fvwm2
- twm
- ...
Und eben dieser muss dann abgemagert werden, daß er nicht unnötiges
anbietet.
Wobei ich eher vermute, daß das mit KDE oder gnome gar nicht geht
oder schwierig ist. Gefühlsmäßig würde ich bei fvwm2 oder icewm
anfangen.

Autor: bb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn NUR eine einzige GUI Applikation laufen soll, kann man sich 
Anmelde- und Windowmanager auch komplett schenken. Es sollte genügen, im 
letzten Init-Script den X-Server zu starten (startx) und die zu 
startende Applikation ins entsprechende .xinitrc einzutragen.

Autor: Nez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Klaus Wachtler

Uups. Ja. Du hast recht. kdm/gdm sind die Anmeldemanager, gnome und kde 
die user interfaces.

@ bb
>Also wenn NUR eine einzige GUI Applikation laufen soll, kann man sich
>Anmelde- und Windowmanager auch komplett schenken. Es sollte genügen, im
>letzten Init-Script den X-Server zu starten (startx) und die zu
>startende Applikation ins entsprechende .xinitrc einzutragen.

An sich wäre das optimal, wenn nur ein bestimmter user, zwar automatisch 
aber eben doch, eingeloggt wird. Wenn aber der X-Server gestartet wird 
sollte schon ein user eingeloggt sein, oder?

Autor: bb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> An sich wäre das optimal, wenn nur ein bestimmter user, zwar automatisch
> aber eben doch, eingeloggt wird. Wenn aber der X-Server gestartet wird
> sollte schon ein user eingeloggt sein, oder?

Wenn der X-Server aus einem init-script gestartet wird, läuft der unter 
der UID 0 (root). Wenn eine andere UID gewüscht wird, sollte ein starten 
des X-Servers mit 'su <meinuser> -c "startx"' funktionieren.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und nicht vergessen unter /etc/inittab die Konsolen auszuschalten...

Kommst ja immer noch per SSH/telnet auf die Kiste

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ersteinmal den Teil mit den Konsolen in der /etc/inittab so abaendern:
c1:2345:boot:/sbin/agetty -8 -n -l /usr/sbin/autologinuser 38400 vc/1 linux
c2:2345:respawn:/sbin/agetty -8 38400 vc/2 linux
c3:2345:respawn:/sbin/agetty -8 38400 vc/3 linux
c4:2345:respawn:/sbin/agetty -8 38400 vc/4 linux
c5:2345:respawn:/sbin/agetty -8 38400 vc/5 linux
c6:2345:respawn:/sbin/agetty -8 38400 vc/6 linux

Das programm autologinuser ist dieses hier:
#include <unistd.h>

int main() {
   execlp( "login", "login", "-f", "user", 0);
}

Bei "user" deinen Usernamen eingeben und compilieren und nach /usr/sbin/ 
kopieren.

In der ~/.bashrc muss dann ein startx vorhanden sein und der Rest geht 
dann in der ~/.xinitrc ab. Dort kannst du dann nen WM oder auch nur dein 
Programm oder was auch immer starten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.