J'ai installé Debian sur ma machine hier soir. À présent, je ne comprends pas pourquoi je ne peux pas exécuter d’applications graphiques à partir d’un terminal sous root.
Par exemple:
sudo -i
glxgears
Génère la sortie suivante:
No protocol specified
Error: couldn't open display :0
Mais lorsque j'ouvre le terminal pour la première fois, je peux exécuter glxgears
le compte d'utilisateur. Ce n'est qu'après que je fais sudo -i
que le problème se pose. Cela se produit pour n'importe quelle application graphique que j'essaie de lancer. Je pense que c'est probablement lié à X11, mais je ne suis pas sûr.
Réponses:
L'accès au serveur X nécessite deux choses:
$DISPLAY
variable pointant vers le bon affichage (généralement:0
)Les informations d'authentification peuvent être explicitement spécifiées via
$XAUTHORITY
, et par défaut,~/.Xauthority
sinon.Si
$DISPLAY
et$XAUTHORITY
est défini pour votre utilisateur,sudo
les définira également pour le nouveau shell et tout devrait fonctionner correctement.S'ils ne sont pas définis, ils utiliseront probablement les mauvaises valeurs par défaut et vous ne pourrez pas démarrer et les applications X.
Dans Debian
$XAUTHORITY
n’est généralement pas défini explicitement. Ajoutez simplementà votre
.bashrc
ou explicitement direXAUTHORITY=~/.Xauthority sudo ...
et tout devrait fonctionner.Vous pouvez également utiliser
xauth list
pour vérifier si les informations d'authentification appropriées sont disponibles.la source
xauth info
indique le chemin d'accès au fichier d'autoritéxhost +
résolu mon problèmexhost +
authentification est complètement désactivée et permet à tout le monde d’accéder à toutes les applications de votre écran ...sudo -i
au lieu desudo su -
.J'ai eu la même question que vous mais pour un utilisateur normal. Disons que je veux démarrer Firefox en utilisant le compte utilisateur foo. Je suis connecté en tant que bar:
Malheureusement, cette commande a échoué avec la même erreur que dans la question (c.-à-d. Aucun protocole spécifié et impossible d'ouvrir l'affichage)
Ma solution consistait simplement à ajouter l'utilisateur foo à la liste des accès autorisés au serveur X.
Et c’est tout, j’ai alors pu lancer Firefox (et une autre application X) en utilisant
sudo
et l’utilisateur foo.Contexte : Sous X Window, il existe une architecture client / serveur. Lorsque vous lancez une application, vous demandez l'autorisation au serveur X de l'afficher. Par défaut, une fois que vous avez ouvert une session (vous vous connectez graphiquement), vous (votre utilisateur) êtes évidemment autorisé à communiquer avec le serveur et à afficher les applications. Les autres utilisateurs ne disposent pas de cette autorisation, sauf si vous le spécifiez.
xhost
est un outil pour manipuler la liste des permissions. Lesi
symbole indique que la règle est côté serveur et autorise l'utilisateur localfoo
à afficher des applications. X Window est très puissant à cet égard et vous pouvez afficher des applications distantes localement en jouant avec laDISPLAY
variable d'environnement etxhost
(sans toutefois s'y limiter). Dans les temps anciens, quand les gens tapaientxhost +
et autorisait implicitement tout le monde à utiliser leur session X, il était possible d'afficher des applications sur leur écran pour les blagues ;-) pas tellement aujourd'hui que les gens utilisent de moins en moins l'architecture client / serveur X Window (du moins pour ce que j'observe 10 dernières années).PS: Je l’ai fait pour lancer Firefox dans une sorte de "prison" (pour éviter une vulnérabilité comme celle de pdf.js à l’avenir). Mais j’ai vite compris qu’appeler Firefox via sudo ne lui permettrait pas d’accéder à l’audio ni au matériel vidéo. Mais il y a un gars qui explique clairement comment activer l'accélération matérielle vidéo et l'audio lors de l'appel de Firefox via sudo . YMMV avec ces instructions, par exemple, je dispose toujours d’une autorisation refusée pour l’audio mais la vidéo fonctionne (testée sur Fedora 22 avec SELinux ON).
la source
foo
étaitroot
, à savoir que je devais courirxhost si:localuser:root
sur Ubuntu 17.10.xhost si:localhost<user>
commande? Si aucun utilisateur n'est connecté, personne n'a de serveur X disponible pour donner l'autorisation.ParaView
, un programme construit survtk
, généralement sur le poste de travail lui-même.ParaView
fournit également un modèle de rendu client / serveur sans tête sécurisé via ssh, que je souhaiterais utiliser à distance au lieu d’utiliser VNC. Sansxhost
me connecter au poste de travail et sans m'exécuter , je ne peux pas utiliser le GPU. Cela signifie que je ne peux pas redémarrer l'ordinateur à distance et que j'ai toujours accès au GPU.-X
ou (mieux?)-Y
Sur ssh, il fera la redirection appropriée. Bien sûr, vous avez besoin d’un serveur C local. Cependant, avec GPU et OpenGL, je ne sais pas trop où se situe le calcul / rendu, c’est peut-être du côté client, pas du côté serveur. Pourrait être délicat.Vous pouvez soit
Spécifiez l'affichage à utiliser sur la ligne de commande, en ajoutant
-display :0.0
ou
Configurez la variable d'environnement dans le script de connexion de root (un des fichiers .bashrc, .profile, .bash_profile ...).
export DISPLAY=:0.0
Vous pouvez vérifier si c'est réglé,
Pour ouvrir votre affichage à tous les utilisateurs de tous les hôtes en tant qu'utilisateur normal, vous pouvez le faire avec:
xhost +
la source
xhost +
travaillé pour moi aussi, seulement qu'ils ont oublié de mentionner que nous devrions l'exécuter à partir du terminal de l'utilisateur qui autorise, pas d'un terminal soussudo su
.Étant donné que vous êtes sur Debian, la solution simple et supportée consiste
sudo
à copier vos informations d’autorisation X11.pam_xauth
est inclus dans lelibpam-modules
package à cette fin; pour l'utiliser, il vous suffit d'ajouterà votre
/etc/pam.d/sudo
dossier. Vous pouvez également choisir de l'ajoutersu
également. Pour des informations complètes, consultezpam_xauth
bien sûr la page de manuel.la source
Ce qui m'a aidé:
xauth generate :0 . trusted
sur leuser
côté, ce qui va générer une nouvelleMIT-MAGIC-COOKIE-1
Vérifiez la clé nouvellement créée avec la variable
xauth list' as
utilisateurand
root(they should be the same if your
xAuthority` qui pointe vers le même fichier.Voila, accédera
root
à toutX-App
depuis le terminal, mais seulement temporairement.Pour le rendre permanent, voir la réponse de @Huygens!
la source
Solution alternative :
Les services tels que cron qui s'exécute sous root n'ont pas accès à l'affichage si l'utilisateur x actuel n'est pas root.
Nous avons juste besoin d'ajouter l'utilisateur root à x, vous pouvez le faire au moment de la connexion avec un script de démarrage
À des fins de test, nous pouvons simplement exécuter la commande sous l'utilisateur actuel et relancer le script racine / job / service / ...
la source
La
sudo
commande a un commutateur pour préserver les variables d'environnement.Pour que vous puissiez exécuter la commande avec l'option -E. Exemple:
Si vous n'avez pas besoin d'exécuter des applications critiques pour la confidentialité telles que les navigateurs Web, il est préférable d'ajouter l'option -E avec sudo. Nous ne pouvons pas exécuter Chrome ou Firefox simplement en ajoutant le commutateur -E . Parce que de nombreux navigateurs ont mis en place une protection contre les violations de l'espace utilisateur. La réponse de @ huygens peut donner un aperçu de ce sujet.
Remarque: Ajout d' option -e ne l' aide si l'environnement de votre utilisateur n'a pas
DISPLAY
etXAUTHORITY
déjà correctement réglé .la source
utilisez cette commande et cela fonctionnera
la source
cp: cannot stat ‘/home/user/.Xauthority’: No such file or directory
sur l’une des 10 machines basées sur Debian auxquelles j’ai accès.