
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.
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-quit
executar 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-quit
o 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 sudo
da falha do comando é porque você iniciou o servidor X 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ê 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:
Crie o script, sem
sudo
os comandos privilegiados, mascomsudo
para o logout. Por exemplo:#!/bin/bash apt-get install firefox sudo -E -u pandya gnome-session-quit
Execute o script com
sudo -E
:sudo -E /path/to/script
Isso sudo -E script.sh
garante que suas variáveis de ambiente estejam disponíveis para o script e sudo -E -u pandya
garante que elas sejam transmitidas para a gnome-session-quit
chamada.
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
}