47 votes

Pourquoi gksu/gksudo ou le lancement d'une application graphique avec sudo ne fonctionnent-ils pas avec Wayland ?

J'ai installé Ubuntu 17.10. Maintenant j'ai des problèmes avec gksu :

$ gksu -dg synaptic
No ask_pass set, using default!
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
STARTUP_ID: gksu/synaptic/8760-0-alex-XPS-15-9530_TIME4974977
cmd[0]: /usr/bin/sudo
cmd[1]: -H
cmd[2]: -S
cmd[3]: -p
cmd[4]: GNOME_SUDO_PASS
cmd[5]: -u
cmd[6]: root
cmd[7]: --
cmd[8]: synaptic
buffer: -GNOME_SUDO_PASS-
brute force GNOME_SUDO_PASS ended...
Yeah, we're in...
Unable to init server: Could not connect: Connection refused
(synaptic:8767): Gtk-WARNING **: cannot open display: :1
xauth: /tmp/libgksu-HgUjgQ/.Xauthority
xauth_env: (null)
dir: /tmp/libgksu-HgUjgQ

Si je n'utilise pas -g la boîte de dialogue du mot de passe est désactivée. Il semble donc qu'il y ait un problème avec la création d'un tty pour root.

Un conseil ?

59voto

Panther Points 96601

Notez que cette réponse est spécifique aux versions d'Ubuntu utilisant Wayland, la version 17.10 étant la première à utiliser Wayland par défaut.

Il s'agit d'une fonctionnalité et non d'un bogue ! C'est une caractéristique de Wayland qui fait que vous ne pouvez pas démarrer des applications graphiques en tant que root à partir du terminal.

Les principales discussions se déroulent bien sûr sur les sites Fedora. Voir aussi Bogue Fedora #1274451 y Les applications graphiques ne peuvent pas être exécutées en tant que root dans wayland (par exemple gedit, beesu, gparted, nautilus) sur Ask Fedora . Mais il y a aussi des discussions sur les sites Ubuntu ( Les développeurs d'Ubuntu ne sont pas certains d'utiliser Wayland par défaut dans la version 17.10 - OMG ! Ubuntu ).

Rapport de bogue Ubuntu : Impossible de lancer des applications pkexec sur une session Wayland

Contournement possible - Si vous éditez des fichiers système avec un éditeur graphique (tel que gedit), utilisez un outil de ligne de commande tel que nano o vim o emacs . nano est généralement plus facile pour les nouveaux utilisateurs, vim est plus puissant et possède plus de fonctionnalités, voir ce tutoriel Vim ou similaire.

Quoi qu'il en soit, si vous voulez ou devez vraiment exécuter des applications graphiques en tant que root , fixer xhost en premier lieu, ce qui force le retour à Xserver.

Pour définir les autorisations, exécutez :

xhost si:localuser:root 

Lorsque vous avez terminé, pour supprimer les autorisations

xhost -si:localuser:root 

Vous pouvez ajouter une option graphique / de bureau pour le faire comme suit ce rapport de bogue synaptique

Les applications pkexec'ed peuvent être guéries avec xhost +si:localuser:root placé dans le démarrage automatique de XDG comme suit (idée de N0rbert) :

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

Vous pouvez ajouter cette commande xhost à .bashrc, mais je vous conseille d'utiliser une paire d'alias

alias gsuon='xhost si:localuser:root'

alias gsuoff='xhost -si:localuser:root'

Vous pouvez nommer les alias comme vous le souhaitez.

Pour plus de détails, voir :


Revenir à Xorg

Si vous préférez Xorg pour une raison quelconque, vous pouvez choisir d'utiliser Xorg lors de la connexion.

見る Comment passer de Wayland à Xorg dans Ubuntu 17.10 ?

22voto

sudodus Points 39902

enter image description here Solutions

Dans Wayland, il est souvent difficile d'exécuter des programmes d'application GUI avec des permissions élevées (sudo -H, gksu ...). C'est une bonne idée d'effectuer de telles tâches avec des outils en ligne de commande.

Mais il existe des solutions de contournement, si vous disposez d'un outil GUI qui fonctionne bien pour vous et qui nécessite des autorisations élevées. (J'utilise deux de ces outils standard : le Synaptic Package Manager, synaptic et l'outil de partitionnement Gparted, gparted . J'utilise MakeUSB pour créer des clés de démarrage USB, mkusb mais il peut exécuter les parties qui nécessitent des autorisations élevées sans graphiques).

gvfs admin backend

Le backend gvfs admin est un bon outil pour les permissions élevées avec des outils GUI. Dans Ubuntu 17.10 (gvfs >= 1.29.4) et les versions plus récentes, vous pouvez utiliser le backend gvfs admin. Notez que vous avez besoin du chemin complet, par exemple

thunar admin:///path/to/directory
gedit admin:///path/to/file

En théorie, la méthode gvfs admin backend (qui utilise polkit) est meilleure et plus sûre (que la méthode xhost y sudo -H ), quelle que soit l'interface utilisateur utilisée.

Vous n'exécutez pas l'ensemble de l'application en tant que root. L'escalade des privilèges n'a lieu qu'en cas de nécessité absolue. Voir le lien suivant et les liens qui en découlent,

xhost y sudo -H

  1. Il existe une solution pour autoriser les programmes d'applications graphiques appartenant à d'autres utilisateurs que l'utilisateur connecté dans Wayland,

     xhost +si:localuser:root
  2. gksu y gksudo ne sont pas fournis avec Ubuntu standard et ne fonctionnent pas ici, mais ils fonctionnent dans Xorg.

    Au lieu de cela, vous pouvez utiliser

     sudo -H

    Edita:

    -H n'est plus nécessaire (dans 20.04 LTS et les versions plus récentes)

    Avant la version 20.04 (ou peut-être 19.10, je ne me souviens plus quand), l'utilisation de sudo pour une application GUI, en particulier le gestionnaire de fichiers, pouvait modifier les droits d'accès des la propriété des fichiers et des dossiers de votre domicile à l'utilisateur root, ce qui complètement votre capacité à vous connecter au système en tant qu'utilisateur. Les changements apportés à la l'utilisation de sudo par le système signifie que ce risque a disparu. Il n'y a donc plus de danger pour ce qui est de ce problème.

    fin de l'édition

  3. Il est conseillé d'empêcher les programmes d'application graphique appartenant à d'autres utilisateurs que l'utilisateur connecté d'être utilisés par la suite,

     xhost -si:localuser:root

nautilus-admin

Il est également possible d'utiliser nautilus-admin pour les opérations sur les fichiers avec des autorisations élevées et d'utiliser gedit avec des autorisations élevées. Ceci est décrit dans la réponse AskUbuntu suivante,

Accès temporaire de l'utilisateur root au bureau Wayland via la fonction gks

À éviter sudo GUI-program . Cela peut amener le système à écraser les fichiers de configuration de votre identifiant habituel par des fichiers root et définir la propriété et les permissions pour qu'elles correspondent à la configuration de root et verrouillez votre identifiant habituel. Vous devez exécuter les applications GUI avec sudo -H qui écrit les fichiers de configuration dans root Répertoire personnel de l'utilisateur /root . Exemple :

sudo -H gedit myfile.txt

Mais vous risquez d'oublier -H . Au lieu de cela, vous pouvez créer une fonction, par exemple gks

gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }

et le stocker dans votre ~/.bashrc près des alias. Vous pouvez ensuite exécuter

gks gedit myfile.txt

de la même manière que vous avez utilisé gksudo avant.

Essais

Vous pouvez vérifier comment sudo , sudo -H y gks travailler avec les commandes suivantes

sudodus@xenial32 ~ $ sudo bash -c "echo ~"
/home/sudodus
sudodus@xenial32 ~ $ sudo -H bash -c "echo ~"
/root
sudodus@xenial32 ~ $ gks () { xhost +si:localuser:root; sudo -H "$@"; xhost -si:localuser:root; }
sudodus@xenial32 ~ $ gks bash -c "echo ~"
localuser:root being added to access control list
/root
localuser:root being removed from access control list
sudodus@xenial32 ~ $ 

et bien sûr

gks gedit myfile.txt

selon l'exemple de la section précédente.

Méthode qui fonctionne via Alt-F2 et le menu Gnome Shell.

Au lieu d'ajouter une simple fonction d'une ligne à ~/.bashrc Il est possible de créer un système qui fonctionne également sans bash. Il peut être pratique à utiliser, mais il est plus compliqué à mettre en place. Veuillez noter que vous ne devez installer qu'une seule des alternatives, car la fonction à une ligne perturbera l'utilisation de ce système plus compliqué.

Trois dossiers

Le shellscript gks :

#!/bin/bash

xhost +si:localuser:root

if [ $# -eq 0 ]
then
  xterm -T "gks console - enter command and password" \
  -fa default -fs 14 -geometry 60x4 \
  -e bash -c 'echo "gks lets you run command lines with GUI programs
with temporary elevated permissions in Wayland."; \
read -p "Enter command: " cmd; \
cmdfile=$(mktemp); echo "$cmd" > "$cmdfile"; \
sudo -H bash "$cmdfile"; rm "$cmdfile"'
else
 xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H "$@"
fi 

xhost -si:localuser:root;

Le fichier du bureau gks.desktop :

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gks
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gks %f
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

Le fichier d'icônes gks.svg ressemble à ceci :

enter image description here

Vous pouvez télécharger le fichier d'icônes ou une archive contenant les trois fichiers à partir de ce lien,

wiki.ubuntu.com/Wayland/gks

Copiez les fichiers [extraits ou copiés-collés] aux emplacements suivants,

sudo cp gks /usr/bin
sudo cp gks.desktop /usr/share/applications/
sudo cp gks.svg /usr/share/icons

Déconnectez-vous, connectez-vous ou redémarrez, et l'icône du bureau devrait fonctionner. Cela fonctionnera à partir d'une fenêtre de terminal comme dans la solution simple avec la fonction.

Alt F2 boîte :

enter image description here

Menu Gnome Shell :

enter image description here

gks console et gparted :

enter image description here

script et fichier de bureau personnalisés

Si vous n'avez que quelques applications GUI qui nécessitent des autorisations élevées, vous pouvez créer des scripts et des fichiers de bureau personnalisés pour elles et éviter d'entrer la commande (nom de l'application). Vous n'aurez qu'à entrer le mot de passe, ce qui n'est pas plus difficile que dans les versions précédentes d'Ubuntu (vous devriez de toute façon entrer le mot de passe).

Exemple avec le programme GUI simple xlogo qui accompagne le paquet de programmes x11-apps :

Le shellscript gkslogo (simplifié par rapport à gks ),

#!/bin/bash

xhost +si:localuser:root

xterm -T "gks console - enter password" -fa default -fs 14 -geometry 60x4 -e sudo -H xlogo

xhost -si:localuser:root;

Le fichier du bureau gkslogo.desktop :

[Desktop Entry]
Version=1.0
Categories=Application;System;
Type=Application
Name=gkslogo
Description=Run program with temporary elevated permissions in Wayland
Comment=Run program with temporary elevated permissions in Wayland
Exec=gkslogo
Icon=/usr/share/icons/gks.svg
Terminal=false
StartupNotify=false
GenericName[en_US.UTF-8]=Run program with temporary elevated permissions in Wayland

J'ai été paresseux et j'ai utilisé le même fichier d'icônes gks.svg

Copiez les fichiers [copiés et collés] aux endroits suivants,

sudo cp gkslogo /usr/bin
sudo cp gkslogo.desktop /usr/share/applications/

gks[logo] console et xlogo :

enter image description here

6voto

eli chan Points 91

Il est préférable de vérifier que wayland fonctionne réellement avant d'accorder le droit d'accès à la racine.

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi

5voto

Jeremy Bicha Points 8124

Si vous utilisez Ubuntu 17.04 ou plus, il est recommandé d'utiliser l'option gvfs admin backend . Il suffit d'ajouter admin:// devant le chemin d'accès complet du fichier que vous souhaitez ouvrir dans une application telle que l'application Éditeur de texte ou le Fichiers apps .

Par exemple, pour modifier les paramètres de démarrage, ouvrez

admin:///etc/default/grub

Cette méthode utilise PolicyKit et fonctionnera toujours avec le Wayland par défaut d'Ubuntu 17.10, alors que sudo et gksu pour les applications graphiques ne fonctionneront pas.

3voto

N0rbert Points 86925

Pour les applications qui utilisent su-to-root et pkexec, vous pouvez ajouter ce code à /etc/xdg/autostart (voir mon commentaire sur launchpad ) à vos risques et périls :

cat <<EOF | sudo tee /etc/xdg/autostart/xhost.desktop
[Desktop Entry]
Name=xhost
Comment=Fix graphical root applications
Exec="xhost +si:localuser:root"
Terminal=false
Type=Application
EOF

D'autres applications racine ne fonctionnent pas non plus sur Wayland (voir bug 1713313 y bug 1713311 ).


Si vous ne souhaitez pas une solution permanente, vous pouvez utiliser la méthode de @ravery :

tapez simplement xhost +si:localuser:root dans le terminal avant de lancer l'application privilégiée

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X