gnome-session-quit 在以 root 身份使用 sudo 运行时无法注销

gnome-session-quit 在以 root 身份使用 sudo 运行时无法注销

我正在运行 Ubuntu 14.04,用户名是 pandya。

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

当上述命令运行时没有在终端中执行 sudo ( sudo su) 后,成功注销。 在此处输入图片描述


但是在以 sudo (以 root 身份)之后运行时,

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

它给出错误:

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

因此,由于我是 root,我尝试以sudo -u pandya gnome-session-quitpandya 用户身份运行命令。但它给出了相同的错误。

然后我尝试以 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

但它给出了同样的错误。

因此,我的问题是:如何以 root 身份注销?因为我想输入gnome-session-quit要以 root 身份运行的 sctipt. (我不想强制杀死进程但想要正常的注销提示)


进一步规范:-

我有一个要以 root 身份运行的脚本。

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

答案1

我不完全确定您要做什么,但命令sudo失败的原因是因为您已经启动了 X 服务器并且pandya没有导出允许您与正在运行的 Gnome 会话进行通信的 pandya 环境变量。

因此,这将允许您终止您的 Gnome 会话:

sudo -E -u pandya gnome-session-quit

man sudo

-E,--保留-环境

向安全策略表明用户希望保留其现有的环境变量。如果用户没有保留环境的权限,安全策略可能会返回错误。


如果您想要一个以 root 身份运行某些命令的脚本,然后希望它能够将您注销,您可以按如下方式进行:

  1. 创建脚本,不sudo包含特权命令,但 sudo用于注销。例如:

    #!/bin/bash
    
    apt-get install firefox
    sudo -E -u pandya gnome-session-quit
    
  2. 使用以下命令运行脚本sudo -E

    sudo -E /path/to/script
    

确保sudo -E script.sh您的环境变量可用于脚本并确保sudo -E -u pandya它们被传递给gnome-session-quit调用。

答案2

我已经创建了这个脚本,它可以从 gnome-session 环境中设置 DBUS 会话变量,以防您想要注销其他用户/会话:

如何从命令行重新启动 Gnome-Shell?

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
}

相关内容