如何在需Root权限的Python脚本中以普通用户启动gnome-terminal
在Root权限脚本中以普通用户身份启动gnome-terminal
- 核心思路:在Root环境下切换到普通用户身份执行
gnome-terminal,同时传递必要的桌面会话环境变量,确保终端能正常在当前桌面启动。
方法一:动态获取当前桌面普通用户
适用于直接以Root身份运行脚本的场景,先获取当前拥有X桌面会话的用户,再切换身份启动终端:
import os # 获取当前登录桌面的普通用户 user = os.popen('who | grep ":0" | awk \'{print $1}\'').read().strip() # 构造切换用户并启动终端的命令,传递桌面会话所需环境变量 cmd = f'su - {user} -c "DISPLAY=$DISPLAY XAUTHORITY=/home/{user}/.Xauthority gnome-terminal"' os.system(cmd)
方法二:利用sudo启动时的原用户信息
如果你的脚本是通过sudo命令启动的(而非直接Root登录),可以直接获取原普通用户,无需额外查询:
import os user = os.environ.get('SUDO_USER') if user: cmd = f'su - {user} -c "DISPLAY=$DISPLAY XAUTHORITY=/home/{user}/.Xauthority gnome-terminal"' os.system(cmd)
注意事项
- 不要硬编码用户名,动态获取能让脚本适配不同用户环境
DISPLAY和XAUTHORITY是终端在当前桌面启动的必要环境变量,必须传递给普通用户进程
内容的提问来源于stack exchange,提问作者AerialSong
相关产品推荐
相关产品推荐

