Por que o gksu / gksudo ou o lançamento de um aplicativo gráfico com o sudo não funcionam com o Wayland?

34

Eu instalei o Ubuntu 17.10. Agora estou com problemas com 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

Se eu não usar -g , a caixa de diálogo de senha será desativada. Então parece um problema com a criação de um tty para root.

Algum conselho?

    
por Alex Chapiro 04.10.2017 / 15:58

7 respostas

42

Note que esta resposta é específica para versões do Ubuntu usando Wayland, sendo 17.10 a primeira versão a usar o Wayland por padrão.

É um recurso que não é um bug! É um recurso de design do Wayland que você não pode iniciar aplicativos gráficos como root no terminal.

As discussões principais são, naturalmente, nos sites do Fedora. Veja Fedora bug # 1274451 e Aplicações gráficas não podem ser executadas como root no wayland (por exemplo, gedit, beesu, gparted, nautilus) no Ask Fedora . Mas há alguma discussão sobre os sites do Ubuntu também ( Ubuntu Devs incerta sobre o uso do Wayland por padrão em 17.10 - OMG! Ubuntu ).

Relatório de erros do Ubuntu: Não é possível iniciar aplicações pkexec'ed na sessão do Wayland

Trabalho potencial - Se você estiver editando arquivos de sistema com um editor gráfico (como gedit), use uma ferramenta de linha de comando, como nano ou vim ou emacs . nano é normalmente mais fácil para novos usuários, vim é mais poderoso e tem mais recursos, consulte este tutorial do Vim ou similar.

De qualquer forma, se você realmente quer ou precisa executar aplicativos gráficos como root , defina xhost primeiro, o que força o fallback para o Xserver.

Para definir as permissões, execute:

xhost si:localuser:root 

Quando terminar, para remover permissões

xhost -si:localuser:root 

Você pode adicionar uma opção gráfica / de área de trabalho para fazer isso conforme este relatório de bug sináptico

  

As aplicações pkexeced podem ser curadas com xhost +si:localuser:root colocado no início automático do XDG da seguinte forma:

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

Você pode adicionar este comando xhost a .bashrc, mas eu aconselho um par de aliases

alias gsuon='xhost si:localuser:root'

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

Você pode nomear os aliases como quiser.

Para detalhes, consulte:

Mude de volta para o Xorg

Se você preferir o Xorg por qualquer motivo, você pode optar por rodar no Xorg no login

Veja Como você muda do Wayland de volta para o Xorg no Ubuntu 17.10?

    
por Panther 04.10.2017 / 16:36
16

Soluções

No Wayland, muitas vezes é difícil executar programas de aplicação GUI com permissões elevadas (sudo -H, gksu ...). É uma boa ideia executar essas tarefas com ferramentas de linha de comando.

Mas há soluções alternativas, se você tiver uma ferramenta de GUI, que funcione bem para você e precise de permissões elevadas. (Eu uso duas dessas ferramentas padrão: o Gerenciador de Pacotes Synaptic, synaptic e a ferramenta de particionamento Gparted, gparted . Eu uso o MakeUSB para criar unidades de inicialização USB < strong> mkusb , também, mas pode executar as partes que precisam de permissões elevadas sem gráficos.

xhost e sudo -H

  1. Existe uma solução alternativa para permitir programas gráficos de aplicativos pertencentes a outros usuários que não o usuário conectado no Wayland,

    xhost +si:localuser:root
    
  2. gksu e gksudo não são empacotados com o Ubuntu padrão e não funcionam aqui, mas funcionam no Xorg.

    Em vez disso, você pode usar

    sudo -H
    
  3. É uma boa idéia evitar programas de aplicativos gráficos pertencentes a outros usuários que não o usuário conectado,

    xhost -si:localuser:root
    

gvfs admin backend

No Ubuntu 17.10 (gvfs & gt; = 1.29.4) você pode usar o backend gvfs admin. Observe que você precisa do caminho completo,

gedit admin:///path/to/file

Em teoria, o método backend de administração gvfs (que usa o polkit) é melhor e mais seguro (do que o xhost e o xudo -H ), independentemente da interface de usuário usada.

Você não executa o aplicativo inteiro como root. A escalação de privilégios acontece somente quando estritamente necessário. Veja o seguinte link e links dele,

nautilus-admin

Também é possível usar nautilus-admin para operações de arquivo com permissões elevadas e usar gedit com permissões elevadas. Isso é descrito na seguinte resposta do AskUbuntu,

  • Como posso iniciar o Nautilus como root? >

Acesso temporário para o root na área de trabalho do Wayland através da função gks

Por favor, evite sudo GUI-program . Isso pode fazer com que o sistema substitua os arquivos de configuração da sua ID de usuário comum com a configuração de root e defina a propriedade e as permissões para ajustar root e bloquear sua ID de usuário comum. Você deve executar aplicativos GUI com sudo -H , que grava os arquivos de configuração no diretório base root /root . Exemplo:

sudo -H gedit myfile.txt

Mas há o risco de você esquecer -H . Em vez disso, você pode criar uma função, por exemplo gks

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

e armazene-o no seu ~/.bashrc próximo aos aliases. Então você pode correr

gks gedit myfile.txt

de uma maneira semelhante à forma como você usou gksudo antes.

Teste

Você pode verificar como sudo , sudo -H e gks funcionam com os seguintes 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 ~ $ 

e, claro,

gks gedit myfile.txt

de acordo com o exemplo da seção anterior.

Método que funciona via menu Alt-F2 e Gnome Shell

Em vez de adicionar uma função simples de uma linha a ~/.bashrc , você pode criar um sistema que funcione também sem bash. Pode ser conveniente usar, mas é mais complicado de configurar. Por favor note que você deve instalar apenas uma das alternativas, porque a função de uma linha irá atrapalhar usando este sistema mais complicado.

Três arquivos

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

O arquivo da área de trabalho 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

O arquivo de ícone gks.svg se parece com isto:

Você pode baixar o arquivo de ícone ou um arquivo tar com todos os três arquivos deste link,

wiki.ubuntu.com/Wayland/gks

Copie o [extraído ou copiado & amp; colou] arquivos nos seguintes locais,

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

Logout / login ou reinicialização, e deve haver um ícone na área de trabalho. Ele funcionará a partir de uma janela de terminal como a solução simples com a função.

Caixa Alt F2 :

Menu do Gnome Shell:

gks console e gparted:

Script personalizado e arquivo da área de trabalho

Se você tiver apenas alguns aplicativos de GUI, que precisam de permissões elevadas, poderá criar scripts personalizados e arquivos da área de trabalho para eles e evitar inserir o comando (nome do aplicativo). Você só digitaria a senha, o que não é mais difícil em comparação com as versões anteriores do Ubuntu (você deve digitar a senha de qualquer maneira).

Exemplo com o programa GUI simples xlogo que vem com o pacote de programas x11-apps :

O shellscript gkslogo (simplificado em comparação com 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;

O arquivo da área de trabalho 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

Eu era preguiçoso e usei o mesmo arquivo de ícones gks.svg

Copie o [copiado & amp; colou] arquivos nos seguintes locais,

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

gks [logo] console e xlogo:

    
por sudodus 04.10.2017 / 16:51
6

Melhor verificar se o caminho realmente está sendo executado antes de conceder direito de root

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

Se você estiver usando o Ubuntu 17.04 ou superior, é recomendado usar o gvfs admin backend . Basta adicionar admin: // à frente do caminho de arquivo completo que você deseja abrir em um aplicativo como o Editor de texto ou o Arquivos de aplicativos .

Por exemplo, para alterar as configurações de inicialização, abra

admin:///etc/default/grub

Este método usa o PolicyKit e ainda funcionará com o padrão Wayland do Ubuntu 17.10, enquanto o sudo e o gksu para aplicativos GUI não.

    
por Jeremy Bicha 23.10.2017 / 20:45
3

Para aplicações que usam su-to-root e pkexec você pode querer adicionar este código a /etc/xdg/autostart (veja meu comentário no launchpad por sua conta e risco:

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

Outras aplicações de raiz estão quebradas no Wayland também (veja bug 1713313 e bug 1713311 ).

Se você não quer uma solução permanente, você pode usar o método @ ravery:

  

apenas digite xhost +si:localuser:root no terminal antes de iniciar o aplicativo privilegiado

    
por N0rbert 22.10.2017 / 12:45
0

Na verdade, o seguinte código quase 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 "$@"

(por favor, desculpe-me pelo estilo ingênuo de bash coding - eu sou uma espécie de novato  com este assunto). T não funciona estável a partir de Alt-F2, se a última seleção não foi um terminal; neste caso, simplesmente não podemos definir o foco para a caixa de diálogo de senha. Parece que funciona no menu do Gnome. De qualquer forma & lt; 1. Não é uma solução 100%. 2. Parece-me que os arquitetos do Ubuntu acham que não devemos procurar nenhum trabalho ao redor ..

    
por Alex Chapiro 26.10.2017 / 04:10
0

Se um aplicativo suportar a Wayland API, você poderá executá-lo como root usando o comando sudo -EH application .

O switch -E diz ao sudo para preservar as variáveis de ambiente (assim como WAYLAND_SOCKET e XDG_RUNTIME_DIR) necessárias para os aplicativos de rotas terrestres. É sempre melhor usar essa opção do que o desagradável xhost hack proposto em outras respostas. xhost permite que o aplicativo seja executado sob o wrapper X, que é menos seguro que o Wayland (área de transferência compartilhada, keylogging, etc.). O truque sudo-EH não funciona com um aplicativo que não tenha sido reescrito para wayland, como o gparted, por exemplo, mas funcionaria com o gedit, etc.

    
por ZAB 03.05.2018 / 21:08