gnome-session-quit para sair não funciona quando executado como root com sudo

gnome-session-quit para sair não funciona quando executado como root com sudo

Estou executando o Ubuntu 14.04 e o nome de usuário é pandya.

pandya@pandya-desktop:~$ gnome-session-quit

Quando o comando acima for executadosemsendo sudo ( sudo su) no terminal, ele efetua logout com sucesso. insira a descrição da imagem aqui


Mas ao correr atrás do sudo (como root),

root@pandya-desktop:/home/pandya# gnome-session-quit

Dá erro:

** (gnome-session-quit:3168): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files

Então, por ser root, tento executar o comando para sudo -u pandya gnome-session-quitexecutar o comando como um usuário pandya. Mas dá o mesmo erro.

Então eu tento executar como pandya:

root@pandya-desktop:/home/pandya# su pandya
pandya@pandya-desktop:~$ gnome-session-quit

** (gnome-session-quit:3269): WARNING **: Failed to call logout: The name org.gnome.SessionManager was not provided by any .service files

Mas dá o mesmo erro.

Portanto, minha pergunta é:Como sair como root? Porque eu quero colocar gnome-session-quito sctipt que será executado como root. (Não quero encerrar o processo à força, mas quero o prompt de logout normal)


Especificação adicional: -

Eu tenho um script que deve ser executado como root.

#! /bin/bash
....command to be executed.....
sudo -u pandya gnome-session-quit

Responder1

Não tenho muita certeza do que você está tentando fazer, mas o motivo sudoda falha do comando é porque você iniciou o servidor X pandyae não está exportando as variáveis ​​de ambiente do pandya que permitem a comunicação com a sessão do Gnome em execução.

Então, isso permitirá que você elimine sua sessão do Gnome:

sudo -E -u pandya gnome-session-quit

De man sudo:

-E, --preserve-env

Indica à política de segurança que o usuário deseja preservar suas variáveis ​​de ambiente existentes. A política de segurança pode retornar um erro se o usuário não tiver permissão para preservar o ambiente.


Se você deseja ter um script que execute alguns comandos como root e, em seguida, deseja que ele seja capaz de desconectar você, você pode fazer o seguinte:

  1. Crie o script, sem sudoos comandos privilegiados, mascom sudopara o logout. Por exemplo:

    #!/bin/bash
    
    apt-get install firefox
    sudo -E -u pandya gnome-session-quit
    
  2. Execute o script com sudo -E:

    sudo -E /path/to/script
    

Isso sudo -E script.shgarante que suas variáveis ​​de ambiente estejam disponíveis para o script e sudo -E -u pandyagarante que elas sejam transmitidas para a gnome-session-quitchamada.

Responder2

Eu criei este script que define as variáveis ​​de sessão DBUS do ambiente gnome-session caso você queira sair de outros usuários/sessões:

Como reiniciar o Gnome-Shell a partir da linha de comando?

function logout() {
    local USERNAME
    export USERNAMES=( ) 
    while [ -n "$1" ]; do case "$1" in
        -* ) break ;;
        *) USERNAMES+=( "$1" ); shift ;;
    esac; done

    for USERNAME in "${USERNAMES[@]}"; do
        local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
        if [ -n "$SESSION_PID" ]; then
            (
                sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
                echo "gnome-session-quit --logout $@"
            ) | sudo -u "$USERNAME" sh -;
        fi
    done
}

informação relacionada