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

3

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

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

Quando o comando acima é executado sem sendo sudo ( sudo su ) no terminal, ele efetua logout com êxito.

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 causa do root, eu tento executar o comando com sudo -u pandya gnome-session-quit para executar o comando como um usuário pandya. Mas dá o mesmo erro.

Então eu tento seguir correndo 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.

Por isso, minha pergunta é: Como fazer logout como root? Porque eu quero colocar gnome-session-quit no sctipt que deve ser executado como root . (Eu não quero matar o processo com força, mas quero o prompt normal de logout)

Outras especificações: -

Eu tenho um script que deve ser executado como root.

#! /bin/bash
....command to be executed.....
sudo -u pandya gnome-session-quit
    
por Pandya 05.05.2014 / 10:35

2 respostas

3

Não tenho certeza do que você está tentando fazer, mas a razão pela qual o comando sudo está falhando é porque você iniciou o servidor X como pandya e 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ê mate sua sessão do Gnome:

sudo -E -u pandya gnome-session-quit

De man sudo :

  

-E, --preserve-env

     

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

Se você quiser ter um script que execute alguns comandos como root e, em seguida, quiser que seja capaz de fazer logout, você pode fazer isso da seguinte maneira:

  1. Crie o script, sem sudo para os comandos privilegiados, mas com sudo para 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
    

O sudo -E script.sh garante que suas variáveis env estejam disponíveis para o script e o sudo -E -u pandya garante que elas sejam passadas para a chamada gnome-session-quit .

    
por terdon 05.05.2014 / 11:47
1

Eu criei este script que define as variáveis de sessão DBUS do ambiente gnome-session, caso você queira fazer logout 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 "" ]; do case "" in
        -* ) break ;;
        *) USERNAMES+=( "" ); 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
}
    
por sehe 21.01.2017 / 14:27