Pourquoi ne pas gksu / gksudo ou lancer une application graphique avec sudo fonctionne avec Wayland?

35

J'ai installé Ubuntu 17.10. Maintenant, je rencontre 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. Donc, ressemble à un problème avec la création d'un tty pour root.

Des conseils?

    
posée Alex Chapiro 04.10.2017 - 15:58
la source

7 réponses

44

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

C'est une fonctionnalité, pas un bug! Wayland considère que vous ne pouvez pas démarrer des applications graphiques en tant que root à partir du terminal.

Les principales discussions sont bien sûr sur les sites de Fedora. Voir bogue Fedora # 1274451 et 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 au 17.10 - OMG! Ubuntu ).

Rapport de bogue Ubuntu: Impossible de lancer les applications pkexec sur la session Wayland

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

Dans tous les cas, si vous voulez vraiment ou devez exécuter des applications graphiques en tant que root , définissez xhost en premier, ce qui force le retour vers Xserver.

Pour définir des autorisations, procédez comme suit:

xhost si:localuser:root 

Lorsque vous avez terminé, pour supprimer les autorisations

xhost -si:localuser:root 

Vous pouvez ajouter une option graphique / bureau pour ce faire selon ce rapport de bogue synaptique

  

Les applications pkexec'ed peuvent être réparées avec xhost +si:localuser:root placé dans le démarrage automatique de XDG comme suit (l'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 conseillerais 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:

Revenez à Xorg

Si vous préférez Xorg pour une raison quelconque, vous pouvez choisir d’exécuter sur Xorg à la connexion

Voir Comment faire vous passez de Wayland à Xorg dans Ubuntu 17.10?

    
réponse donnée Panther 04.10.2017 - 16:36
la source
18

Solutions

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

Il existe des solutions de contournement, si vous avez un outil graphique, qui fonctionne bien pour vous et nécessite des autorisations élevées. (J'utilise deux outils standard: le gestionnaire de paquets Synaptic, synaptic et l'outil de partitionnement Gparted, gparted . J'utilise MakeUSB pour créer des lecteurs de démarrage USB, < strong> mkusb également, mais il peut exécuter les parties nécessitant des autorisations élevées sans éléments graphiques.

xhost et sudo -H

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

    xhost +si:localuser:root
    
  2. gksu et 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
    
  3. C'est une bonne idée d’empêcher les applications graphiques appartenant à d’autres utilisateurs que l’utilisateur connecté par la suite,

    xhost -si:localuser:root
    

backend admin gvfs

Dans Ubuntu 17.10 (gvfs & gt; = 1.29.4), vous pouvez utiliser l’administrateur gvfs. Notez que vous avez besoin du chemin complet,

gedit admin:///path/to/file

En théorie, la méthode gvfs admin backend (qui utilise polkit) est meilleure et plus sûre (que xhost et xudo -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 de privilèges ne se produit que lorsque cela est strictement nécessaire. Voir le lien suivant et les liens à partir de celui-ci,

nautilus-admin

Il est également possible d'utiliser nautilus-admin pour les opérations de 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 pour root au bureau Wayland via la fonction gks

Veuillez éviter sudo GUI-program . Cela peut amener le système à écraser les fichiers de configuration de votre ID utilisateur habituel avec la configuration de root et à définir la propriété et les autorisations correspondant à root et à verrouiller votre ID utilisateur habituel. Vous devez exécuter les applications GUI avec sudo -H , qui écrit les fichiers de configuration dans le répertoire de base root /root . Exemple:

sudo -H gedit myfile.txt

Mais il y a un risque que vous oubliez -H . Au lieu de cela, vous pouvez créer une fonction, par exemple gks

gks () { xhost +si:localuser:root; sudo -H "[email protected]"; xhost -si:localuser:root; }

et stockez-le dans votre ~/.bashrc près des alias. Ensuite, vous pouvez courir

gks gedit myfile.txt

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

Test

Vous pouvez vérifier comment sudo , sudo -H et gks fonctionnent avec les commandes suivantes

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

et bien sûr

gks gedit myfile.txt

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

Méthode qui fonctionne via les menus Alt-F2 et Gnome Shell

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

Trois fichiers

Le script shells 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 "[email protected]"
fi 

xhost -si:localuser:root;

Le fichier de 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ône gks.svg ressemble à ceci:

Vous pouvez télécharger le fichier d’icône ou une archive contenant les trois fichiers de ce lien,

wiki.ubuntu.com/Wayland/gks

Copiez le [extrait ou copié & amp; collé] fichiers 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 il devrait y avoir une icône de bureau qui fonctionne. Cela fonctionnera à partir d'une fenêtre de terminal comme avec la solution simple avec la fonction.

Alt F2 :

Menu Gnome Shell:

console gks et gparted:

Script personnalisé et fichier de bureau

Si vous ne disposez que de quelques applications graphiques nécessitant des autorisations élevées, vous pouvez créer des scripts et des fichiers de bureau personnalisés et éviter d’entrer la commande (nom de l’application). Vous ne devez entrer que le mot de passe, ce qui n'est pas plus difficile par rapport aux versions précédentes d'Ubuntu (vous devez tout de même entrer le mot de passe).

Exemple avec le programme graphique simple xlogo fourni avec le package de programme x11-apps :

Le script shells 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 de 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'étais paresseux et j'ai utilisé le même fichier icône gks.svg

Copiez le [copié & amp; collé] fichiers aux emplacements suivants,

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

console gks [logo] et xlogo:

    
réponse donnée sudodus 04.10.2017 - 16:51
la source
6

Mieux vérifier si wayland fonctionne vraiment avant d’accorder le droit root

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi
    
réponse donnée eli chan 07.10.2017 - 12:52
la source
5

Si vous utilisez Ubuntu 17.04 ou supérieur, il est recommandé d’utiliser le gvfs admin backend . Ajoutez simplement admin: // au début du chemin de fichier complet que vous souhaitez ouvrir dans une application comme Editeur de texte ou Applications de fichiers .

Par exemple, pour modifier les paramètres d’amorçage, ouvrez

admin:///etc/default/grub

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

    
réponse donnée Jeremy Bicha 23.10.2017 - 20:45
la source
3

Pour les applications qui utilisent su-to-root et pkexec, vous pouvez ajouter ce code à /etc/xdg/autostart (voir mon commentaire sur le tableau de bord ) à 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 sont également endommagées sur Wayland (voir bug 1713313 et bug 1713311 ).

Si vous ne voulez pas de 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

    
réponse donnée N0rbert 22.10.2017 - 12:45
la source
0

En réalité, le code suivant fonctionne presque:

#! /bin/bash
set -e 
if [ -z "" ] ; then
    echo "Application is not specified" ;  exit
fi 
if [ $XDG_SESSION_TYPE = "wayland" ]; then
    if [[ -t 1 ]]; then
       xhost +si:localuser:root
       sudo -u root "[email protected]"
       xhost  -  
       exit 0
    fi 
fi
gksu "[email protected]"

(veuillez m'excuser pour le style naïf de codage bash - je suis une sorte de débutant  avec ce sujet). T ne fonctionne pas stable depuis Alt-F2, si la dernière sélection n'était pas un terminal; dans ce cas, nous ne pouvons tout simplement pas définir le focus sur le dialogue de mot de passe. On dirait que cela fonctionne depuis le menu Gnome. En tout cas & lt; 1. Ce n'est pas une solution à 100%. 2. Il me semble que les architectes Ubuntu pensent que nous ne sommes pas censés rechercher des travaux autour de nous.

    
réponse donnée Alex Chapiro 26.10.2017 - 04:10
la source
0

Si une application prend en charge l'API Wayland, vous pouvez l'exécuter en tant que root en utilisant la commande sudo -EH application .

L'option -E indique à sudo de conserver les variables d'environnement (ainsi que WAYLAND_SOCKET et XDG_RUNTIME_DIR) nécessaires aux applications Wayland. Il est toujours préférable d’utiliser cette option sur un hack xhost désagréable proposé dans d’autres réponses. xhost permet à l'application de s'exécuter sous un wrapper X, ce qui est moins sûr que d'utiliser Wayland (clipboard partagé, keylogging, etc.). Le sudo -EH trick ne fonctionnera pas avec une application qui n'a pas été réécrite pour wayland, comme gparted par exemple, mais qui fonctionnerait avec gedit, etc.

    
réponse donnée ZAB 03.05.2018 - 21:08
la source

Lire d'autres questions sur les étiquettes