web-dev-qa-db-fra.com

Xubuntu 16.04 ttyname a échoué ioctl inapproprié pour le périphérique

J'ai besoin de lancer Xubuntu en tant qu'utilisateur root pour un système de démonstration autonome.

Que j'utilise la fonctionnalité de connexion automatique de lightdm ou que je me connecte via "Autre"> "racine" à l'invite, j'obtiens toujours la réponse suivante:

Error found when loading /root/.profile
mesg: ttyname failed: Inappropriate ioctl for device
As result the session will not be configured correctly.
You should fix the problem as soon as feasible.

enter image description here

Après avoir effacé la boîte ci-dessus, le système fonctionne comme prévu avec l'utilisateur ROOT.

Voici le contenu de /etc/lightdm/lightdm.conf:

[Seat:*]
autologin-guest=false 
autologin-user=root
autologin-user-timeout=0

J'ai vu d'autres problèmes similaires en ligne liés à Vagrind, et ces problèmes ont été résolus avec certaines des dernières mises à jour, mais cela semble toujours se produire sur Xubuntu 16.04.

https://bugs.launchpad.net/ubuntu/+source/lightdm/+bug/1584488

Comment résoudre `ttyname a échoué: ioctl inapproprié pour device` dans Vagrant?

La plupart des forums déclarent que ce message est erroné et ne doit pas être affiché. Est-il possible de lancer Xubuntu automatiquement en tant que root tout en évitant ce popup erroné?

6
boyashley

La cause ultime est que Xubuntu ne s'attendait manifestement pas à ce que quiconque effectue une connexion graphique au compte root. Son fichier .profile par défaut génère une erreur parasite dans cette situation. Si vous regardez la dernière ligne de /root/.profile, vous trouverez:

mesg n || true

Cela empêche les programmes comme talk d'écrire sur votre console. Ceci est particulièrement important si vous vous êtes connecté à la racine via une session de texte (sous xterm, ssh, etc.), car ces messages peuvent encombrer l'écran.

Le bit || true permet d'empêcher le script Shell de se terminer si mesg échoue (comme c'est le cas ici), mais cela ne l'empêche pas de générer des messages d'erreur en cas d'échec, ce que vous voyez.

Le problème vient du fait qu’en mettant la ligne dans .profile, elle est exécutée à chaque fois que bash est exécuté, même lorsqu’il est exécuté à partir d’une session sans périphérique tty (comme lors des premières parties d’une connexion graphique), de sorte que vous voyez. l'erreur. C'est inoffensif, car mesg n'aurait aucun sens s'il était exécuté à partir d'une session sans TTY, mais le bureau ne le sait pas et affiche le message.

Une solution (comme un commentaire dans une question à laquelle vous avez fait référence a dit) est de changer la ligne afin d'éviter d'appeler mesg lorsqu'il n'y a pas de téléscripteur. :

tty -s && mesg n || true

Cela lui dit de ne pas essayer d'appeler mesg quand il n'y a pas de téléscripteur, mais l'appellera quand même s'il y a un téléscripteur (par exemple à partir d'une connexion SSH).

11
David C.