¿Por qué no funciona gksu / gksudo o el inicio de una aplicación gráfica con sudo con Wayland?

36

Instalé Ubuntu 17.10. Ahora estoy teniendo problemas con 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 no uso -g , el cuadro de diálogo de contraseña está deshabilitado. Parece un problema con la creación de un tty para root.

¿Algún consejo?

    
pregunta Alex Chapiro 04.10.2017 - 15:58

7 respuestas

45

Tenga en cuenta que esta respuesta es específica de las versiones de Ubuntu que usan Wayland, 17.10 es la primera versión que usa Wayland de manera predeterminada.

¡Es una característica, no un error! Es una característica de diseño de Wayland que no puede iniciar aplicaciones gráficas como raíz desde la terminal.

Las discusiones principales son, por supuesto, en los sitios de Fedora. Consulte Error Fedora # 1274451 y Las aplicaciones gráficas no se pueden ejecutar como root en wayland (p. ej., gedit, beesu, gparted, nautilus) en Ask Fedora . Pero también hay una discusión sobre los sitios de Ubuntu ( Ubuntu Devs Uncertain sobre el uso de Wayland por defecto en 17.10 - ¡OMG! Ubuntu ).

Informe de errores de Ubuntu: Imposible iniciar aplicaciones pkexec'ed en la sesión de Wayland

Potencial de trabajo en torno a : si está editando archivos del sistema con un editor gráfico (como gedit), use una herramienta de línea de comandos como nano o vim o emacs . nano suele ser más fácil para los usuarios nuevos, vim es más potente y tiene más funciones, consulte este tutorial de Vim o similar.

En cualquier caso, si realmente quiere o necesita ejecutar aplicaciones gráficas como raíz , configure xhost primero, lo que obliga a la recuperación a Xserver.

Para configurar los permisos:

xhost si:localuser:root 

Cuando haya terminado, para eliminar permisos

xhost -si:localuser:root 

Puede agregar una opción gráfica / de escritorio para hacer esto de acuerdo con este informe de errores sinápticos

  Las aplicaciones

pkexec'ed pueden sanarse con xhost +si:localuser:root colocado en el arranque automático XDG de la siguiente manera (idea de Nbertr):

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

Puedes agregar este comando xhost a .bashrc, pero te aconsejaría un par de alias

alias gsuon='xhost si:localuser:root'

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

Puede nombrar los alias lo que desee.

Para detalles, ver:

Volver a Xorg

Si prefiere Xorg por algún motivo, puede seleccionar ejecutar Xorg al iniciar sesión

Consulte Cómo funciona ¿cambias de Wayland a Xorg en Ubuntu 17.10?

    
respondido por el Panther 04.10.2017 - 16:36
18

Soluciones

En Wayland a menudo es difícil ejecutar programas de aplicaciones de GUI con permisos elevados (sudo -H, gksu ...). Es una buena idea hacer tales tareas con las herramientas de línea de comandos.

Pero hay soluciones, si tiene una herramienta de GUI, que funciona bien para usted y necesita permisos elevados. (Utilizo dos de estas herramientas estándar: el Administrador de paquetes Synaptic, synaptic y la herramienta de partición Gparted, gparted . Utilizo MakeUSB para crear unidades de arranque USB, < strong> mkusb , también, pero puede ejecutar las partes que necesitan permisos elevados sin gráficos).

xhost y sudo -H

  1. Existe una solución temporal para permitir programas de aplicaciones gráficas propiedad de otros usuarios además del usuario que inició sesión en Wayland,

    xhost +si:localuser:root
    
  2. gksu y gksudo no se incluyen con Ubuntu estándar y no funcionan aquí, pero funcionan en Xorg.

    En su lugar, puede usar

    sudo -H
    
  3. Es una buena idea evitar que los programas de aplicaciones gráficas que pertenecen a otros usuarios después del usuario conectado,

    xhost -si:localuser:root
    

backend de administración de gvfs

En Ubuntu 17.10 (gvfs & gt; = 1.29.4) puede usar el backend de administración de gvfs. Tenga en cuenta que necesita la ruta completa,

gedit admin:///path/to/file

En teoría, el método de administración gvfs backend (que usa polkit) es mejor y más seguro (que xhost y xudo -H ), independientemente de la interfaz de usuario que use.

No ejecuta toda la aplicación como root. La escalada de privilegios ocurre solo cuando es estrictamente necesario. Vea el siguiente enlace y enlaces desde él,

nautilus-admin

También es posible usar nautilus-admin para operaciones de archivos con permisos elevados y para usar gedit con permisos elevados. Esto se describe en la siguiente respuesta de AskUbuntu,

Acceso temporal para root al escritorio de Wayland a través de la función gks

Evita sudo GUI-program . Puede hacer que el sistema sobrescriba los archivos de configuración de su ID de usuario habitual con la configuración de root y establecer la propiedad y los permisos para que quepan root y bloquear su ID de usuario habitual. Debe ejecutar aplicaciones de GUI con sudo -H , que escribe los archivos de configuración en el directorio de inicio de root /root . Ejemplo:

sudo -H gedit myfile.txt

Pero existe el riesgo de que olvide -H . En su lugar, puede crear una función, por ejemplo gks

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

y guárdelo en su ~/.bashrc cerca de los alias. Entonces puedes ejecutar

gks gedit myfile.txt

de forma similar a cómo usaste gksudo antes.

Prueba

Puedes comprobar cómo sudo , sudo -H y gks funcionan con los siguientes comandos

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 ~ $ 

y, por supuesto,

gks gedit myfile.txt

de acuerdo con el ejemplo de la sección anterior.

Método que funciona a través de Alt-F2 y el menú de Gnome Shell

En lugar de agregar una función simple de una línea a ~/.bashrc , puede crear un sistema que también funcione sin bash. Puede ser conveniente usarlo, pero es más complicado de configurar. Tenga en cuenta que debe instalar solo una de las alternativas, ya que la función de una línea se alterará utilizando este sistema más complicado.

Tres archivos

El 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;

El archivo de escritorio 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

El archivo de ícono gks.svg se ve así:

Puede descargar el archivo de icono o un archivo tar con los tres archivos de este enlace,

wiki.ubuntu.com/Wayland/gks

Copia [extraído o copiado & amp; pegaron] archivos en las siguientes ubicaciones,

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

Cerrar sesión / iniciar sesión o reiniciar, y debe haber un icono de escritorio en funcionamiento. Funcionará desde una ventana de terminal como con la solución simple con la función.

Alt F2 cuadro:

Menú de Gnome Shell:

gks console y gparted:

Script personalizado y archivo de escritorio

Si solo tiene unas pocas aplicaciones de GUI que necesitan permisos elevados, puede crear scripts personalizados y archivos de escritorio para ellos y evitar ingresar el comando (nombre de la aplicación). Solo ingresaría la contraseña, que no es más difícil en comparación con las versiones anteriores de Ubuntu (debe ingresar la contraseña de todos modos).

Ejemplo con el sencillo programa GUI xlogo que viene con el paquete de programa x11-apps :

El shellscript gkslogo (simplificado en comparación con 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;

El archivo de escritorio 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

Era flojo y usé el mismo archivo de icono gks.svg

Copia [copiado y amp; pegaron] archivos en las siguientes ubicaciones,

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

gks [logo] console y xlogo:

    
respondido por el sudodus 04.10.2017 - 16:51
6

Compruebe mejor si wayland realmente se está ejecutando primero antes de otorgar el derecho de root

if [ $XDG_SESSION_TYPE = "wayland" ]; then
    xhost +si:localuser:root
fi
    
respondido por el eli chan 07.10.2017 - 12:52
5

Si usa Ubuntu 17.04 o superior, se recomienda utilizar el administrador de gvfs backend . Simplemente agregue admin: // al frente de la ruta de archivo completa que desea abrir en una aplicación como Text Editor o Files apps .

Por ejemplo, para cambiar la configuración de inicio, abra

admin:///etc/default/grub

Este método usa PolicyKit y seguirá funcionando con el valor predeterminado Wayland de Ubuntu 17.10, mientras que sudo y gksu para las aplicaciones GUI no lo harán.

    
respondido por el Jeremy Bicha 23.10.2017 - 20:45
3

Para aplicaciones que usan su-to-root y pkexec, puede agregar este código a /etc/xdg/autostart (ver mi comentario en la plataforma de lanzamiento ) bajo su propio riesgo:

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

Otras aplicaciones de root también están rotas en Wayland (ver error 1713313 y error 1713311 ).

Si no quiere una solución permanente, puede usar el método de @ ravery:

  

simplemente escribe xhost +si:localuser:root en el terminal antes de iniciar la aplicación con privilegios

    
respondido por el N0rbert 22.10.2017 - 12:45
0

En realidad, el siguiente código casi funciona:

#! /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 "$@"
       xhost  -  
       exit 0
    fi 
fi
gksu "$@"

(discúlpeme por el estilo ingenuo de codificación de bash, soy una especie de novato  con este tema). T no funciona estable desde Alt-F2, si la última selección no fue una terminal; en este caso, simplemente no podemos establecer el foco en el diálogo de contraseña Parece que funciona desde el menú de Gnome. De todos modos & lt; 1. No es una solución al 100%. 2. Me parece que los arquitectos de Ubuntu piensan que se supone que no debemos buscar ningún problema ...

    
respondido por el Alex Chapiro 26.10.2017 - 04:10
0

Si una aplicación es compatible con la API de Wayland, puedes ejecutarla como root usando el comando sudo -EH application .

El modificador -E le dice a sudo que preserve las variables de entorno (así como WAYLAND_SOCKET y XDG_RUNTIME_DIR) necesarias para las aplicaciones de wayland. Siempre es mejor usar esta opción sobre el desagradable pirateo xhost propuesto en otras respuestas. xhost permite que la aplicación se ejecute desde X wrapper, que es menos seguro que con Wayland (portapapeles compartido, registro de teclas, etc.). El truco sudo -EH no funcionará con una aplicación que no haya sido reescrita para wayland, como gparted por ejemplo, pero que funcionaría con gedit, etc.

    
respondido por el ZAB 03.05.2018 - 21:08

Lea otras preguntas en las etiquetas