我们正常的思路是通过su命令:
su user -c "带界面的程序路径"
很遗憾,这是不可行的。于是我们再用runuser试下?
runuser -l user -c "带界面的程序路径"
吼吼,报错了。
qt.qpa.screen: QXcbConnection: Cloud not connect to display
Cloud not connect to any X display
这是为什么 呢?
我们在程序的入口处打印环境变量,比较一下。
这是正常环境下打开带界面程序时的环境变量。
- "0 : CLUTTER_IM_MODULE=fcitx \n"
- "1 : DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus \n"
- "2 : DESKTOP_SESSION=deepin \n"
- "3 : DISPLAY=:0 \n"
- "4 : GDMSESSION=deepin \n"
- "5 : GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/org.qt-project.qtcreator.desktop \n"
- "6 : GIO_LAUNCHED_DESKTOP_FILE_PID=18811 \n"
- "7 : GNOME_DESKTOP_SESSION_ID=this-is-deprecated \n"
- "8 : GPG_AGENT_INFO=/run/u