Auto-login d'un user et lancement d'un startx

Bonjour tout le monde, je souhaite pouvoir logger au démarrage un username et lancer un environnement graphique tout bête avec startx au démarrage en runlevel 3.

Le souci que je rencontre est que le shell me renvoi le message suivant :
-sh: you don’t have the job control in this shell

Quelqu’un connaît-il la méthode pour lancer un startx proprement d’un user quelconque à partir du runlevel 3 ?
(plus de détails dans le courant de la matinnée sur la façon dont j’ai fait)

je ne comprends pas pourquoi tu ne choisis pas tout simplement un login manager que tu configurerais en auto login, mais bon, puisque tu as décidé de faire autrement…
Maintenant, ce serait interressant que tu dises COMMENT tu lances ton startx en automatique.
A priori, le pb semble venir d’un appel genre “startx &” qui est refusé par le shell de lancement.
Mais il me semble que startx rend la main aprés son lancement, donc peut être qu’en oubliant simplement le &, ca passerait, non ?

Voici donc la façon très simple dont j’ai procédé :

Tout d’abord j’ai mis le runlevel à 3 par défaut dans le /etc/inittab et j’y ai ajouté ceci :

#Ajout perso dans /etc/inittab echo "login de toto" su - toto echo "demarrage de startx" startx

Je pense que vous aurez tous compris que “toto” est l’utilisateur que je veux logger automatiquement ^^. Je récupère donc ceci à l’écran :

login de toto
-sh: no job control in this shell

(Je n’utilise pas de login manager car j’utilise un debian embarqué sur une sorte de minipc avec un espace de stockage très très faible)

J’ai essayé de faire autrement, toujours en runlevel 3, cete fois ci j’ai utilisé :

echo "login de toto et lancement de startx" /bin/su - toto -c '/usr/X11R6/bin/startx'

J’ai à l’écran :

login de toto et lancement de startx
\n /usr/X11R6/lib/X11/xinit/xinitrc
\n
/usr/X11R6/bin/startx: line 68: xinit: command not found

Je pense donc qu’avec ceci, il arrive à entrer dans le script du startx mas qu’il rencontre une erreur et n’affiche pas l’environnement graphique.

Alors essayes de lui passer un path permettant de trouver xinit, avec un
/bin/su - toto -c ‘export PATH=" /usr/bin/X11:$PATH" /usr/X11R6/bin/startx’

Mais je me répète, tu peux aussi configurer kdm pour ne démarrer en autologin qu’au runlevel 3 (lire le contenu de /etc/init.d/kdm).

Malheureusement je n’ai pas de fichier kdm ou xdm sur ce minipc. De plus, je ne comprend pas comment il ne connaît pas la commande xinit, elle se situe dans /usr/X11R6-e/bin qui est dans ma variable $PATH ($PATH=/usr/bin:/bin:/usr/X11R6-e/bin:/usr/sbin:/sbin).

J’ai essayé de rajouter un autre chemin qui contient cette commande dans $PATH, j’ai donc fait :

echo "login de arcom et lancement de startx" /bin/su toto -c 'export $PATH="/usr/bin:/bin:/usr/X11R6-e/bin:/usr/sbin:/sbin:/usr/X11R6/bin" ; /usr/X11R6/bin/startx'

J’obtiens ceci :

login de arcom et lancement de startx
sh: line 1: export: `/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin=/usr/bin:/bin:/usr/X11R6-e/bin:/usr/sbin:/sbin:/r
\n /usr/X11R6/lib/X11/xinit/xinitrc
\n
/usr/X11R6/bin/startx: line 68: xinit: command not found

A la suite de ceci, je remarque qu’il ne m’a pas laissé changé le contenu de la variable $PATH, il fait donc encore la même erreur.

On code un programme autologin.c contenant :

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

Biensûr, on doit remplacer toto par le nom du compte utilisateur visé!!
Puis on le compile :

puis on copie le binaire dans /usr/sbin/autologin(ne pas oublier de rendre root proprio du binaire et de lui donner les droits d’excécution).

  1. /etc/inittab

trouver dans /etc/inittab la ligne :

Il ne reste plus qu’à modifier le fichier ~/bash_profile pour lancer le programme souhaité sur la bonne console.
3. ~/.bash_profile

Dans ce fichier, rajouter après la commande umask 022 :
if [ -z “$DISPLAY” ] && [ $(tty) == /dev/tty1 ]; then
startx
fi

Merci pour ton aide stonfi, j’arrive à logger l’utilisateur tout comme il faut, mais le souci vient du .bash_profile maintenant.

Mon utilisateur toto ne possédait pas de .bash_profile alors je lui en ai créé un, mais apparament il ne l’utilise pas au login de cette utilisateur donc il ne lance pas le startx qui est dedans.

Voici la tête de mon .bash_profile :

[code]echo “.bash_profile”

Get the aliases and functions

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME

if[-z “$DISPLAY”]&&[$(tty) == /dev/tty1];then
/usr/X11R6-e/bin/startx
fi[/code]

Il ne m’affiche pas le echo du début, j’en conclue qu’il n’est pas rentré dedans et je n’ai toujours pas compris comment faire pour qu’au login de l’utilisateur, il s’en serve.

regardes dans /etc/password ce que ton user utilise comme shell. Ce n’est peut être pas un bash (mais j’avoue que ce serait étonnant). Au pire, tu peux changer ça avec chsh

Voilà la tête de mon /etc/passwd :

root:x:0:0:root:/root:/bin/sh ftp:x:14:50:FTP User:/home/ftp: kannel:x:15:51:Kannel User:/: nobody:x:99:99:Nobody:/: toto:x:100:100:Embedded Linux User,,,:/home/toto:/bin/sh lp:x:4:7:lp:/var/spool/lpd: sshd:x:98:98:SSHD:/:

Au fait, pour pouvoir lancer le autologin créé par stonfi, je n’arrive pas à le lancer à partir du inittab avec la ligne 1:2345:respawn:/sbin/getty -n -l /usr/sbin/autologin 38400 tty1. Pour mon système embarqué, le constructeur préconise d’ajouter tout fichier que l’on veut lancer au démarrage dans le /etc/rcX.d/ (3 dans mon cas à la place du X). J’ai donc placé le autologin dedans en l’appelant S95autologin pour qu’il s’exécute après les autres S… (le système les exécutant un à un en partant de celui dont le numéro est le plus bas).

J’ai donc ajouté aussi un .bash_profile dans le /home/toto mais il ne le lance pas. J’ai essayé alors d’ajouter un script dans le /etc/rcX.d/ après celui de mon autologin pour lancer mon startx mais il ne me le lance pas. Je pense que quand il exécute le autologin et qu’il est bien loggé, il ne se préoccupe plus des fichiers dans /etc/rcX.d (une sorte d’appel bloquant lorsqu’on lance la console ??).

Ma machine est une solution embarqué de Arcom, j’y accède via ethernet en ssh, je l’ai aussi relié avec le port com de mon ordi pour rediriger les infos inscrites par la console sur un terminal à l’aide de minicom, ce système embarqué n’affichant des choses sur son écran que au lancement de startx (le but étant de mettre le minipc sous tension et de voir à l’écran seulement l’ihm que je développe dans l’environnement graphique).

Ce que je trouve bizarre, c’est que j’arrive très bien à lancer l’environnement graphique quand j’accède au minipc en ssh en me loggant sur n’importe quel user et en rentrant la commande startx. J’avoue que je commence à être un peu perdu et je n’ai plus trop d’idées pour mon autologin-startx.

as tu essayé le chsh pour forcer l’utilisation de bash à ton user toto (normalement, sh est un lien vers bash, mais on ne sait jamais)
Par ailleurs, as tu essayé de mettre tes commandes dans le .login ou le .cshrc, pour voir ?
Sinon, comme c’est soit l’inittab, soit le script rc, je te conseillerais de le mettre dans l’inittab seulement pour profiter du respawn.
Par ailleurs quitte à faire un binaire d’autologin, autant essayer d’envoyer directement startx au lieu d’un login, non ? c’est pas possible avec un exec quelconque ?

slt,

Pour que “login” lise le fichier ~/.bash_profile il faut que tu regarde deja si tu as un un ~./bashrc si oui tu edite ce dernier et tu insere :

if [ -f ~/.bash_profile ]; then
    source ~/.bash_profile
fi

Sinon pour etre sur qu’il soit lu tu edite le fichier “/etc/profile” et tu insere la meme chose

if [ -f ~/.bash_profile ]; then source ~/.bash_profile fi

Merci à tout le monde pour votre aide je viens de trouver où était le souci pour lancer le startx. Le fichier dans lequel faire le startx n’était pas .bash_profile sur mon minipc mais .profile caché dans un coin de façon vicieuse pour pas que je le débusque ^^.

Merci encore à tous pour votre aide

Bonjours j’ai une petite solution facile pour avoir l’auto-login avec démarrage du serveur X, ça peut toujours servir.

AUTO-LOGIN

Installation de mimgetty avec les droits admin(root):
apt-get install mingetty

Modification du fichier inittab :
nano /etc/inittab

mettre “#” devant :
1:2345:respawn:/sbin/getty 38400 tty1

Et ajouter à la suite: (“login” de l’utilisateur désirer)
1:2345:respawn:/sbin/mingetty --noclear --autologin “login” tty1

AUTO-STARTX

Editer bashrc avec l’utilisateur choisi
nano ~/.bashrc

Et Ajouter à la fin : (ici on automatise startx uniquement pour tty1)
if [ -z “$DISPLAY” ] && [ $(tty) == /dev/tty1 ]; then
startx
fi

source=http://zartche.free.fr/?59-system-auto-login-startx-san-gestionnaire-de-connexion

Pour info :

Lorsqu’on définit une variable dans un script, elle n’est définit que dans le script.

Idem dans un terminal d’ailleurs…

[quote=“kna”]Pour info :

Lorsqu’on définit une variable dans un script, elle n’est définit que dans le script.

Idem dans un terminal d’ailleurs…[/quote]man bashcherchez source filename [arguments]

bjr,

J’ai un doute sur l’option --autologin avec mingetty ; il ne la reconnaît pas
A confirmer
@+