在 X 桌面上,我偶尔使用gksudo
或只是sudo somegui
作为另一个用户(包括 root)启动 GUI 应用程序。我最近发现这在现代(2018 年初)Wayland 桌面上是不可能的。所有应用程序都必须以当前桌面用户的身份启动,并且仅限于该用户的权限。
这是 Wayland 的永久功能(按设计在那里),还是 su-type 用法是尚未实施的增强功能?
我正在寻找书面声明(路线图、设计页面...),而不是偏好或意见。
这是 Wayland 的永久功能吗(有意设计)
不,这与wayland 协议无关。而是环境设置的问题。
Wayland 使用一个套接字,其名称存储在WAYLAND_DISPLAY
. 它位于XDG_RUNTIME_DIR
通常设置为仅供用户访问的位置。但是 root 也可以访问它。(一些应用程序还会考虑XDG_SESSION_TYPE
哪些可以有值wayland
或x11
决定是使用 X 还是 Wayland。)
sudo
删除大多数环境变量,包括XDG_RUNTIME_DIR
和WAYLAND_DISPLAY
。
您可以通过以下方式以 root 身份运行 Wayland 应用程序:
sudo env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR WAYLAND_SOCKET=$WAYLAND_SOCKET waylandapplication
Run Code Online (Sandbox Code Playgroud)
或更短的 with-EH
以保留几乎所有环境变量(但设置HOME
为/root
)。这也将包括DISPLAY
并XAUTHORITY
用于 Xwayland 访问:
sudo -EH application
Run Code Online (Sandbox Code Playgroud)
但是,如果以 root 身份运行的应用程序在 中写入任何内容XDG_RUNTIME_DIR
,则可能会导致用户应用程序出现文件权限问题。
但是,在wayland 中以root 身份运行图形应用程序比在X11 中的安全问题要少得多。
为避免意外使用 X11,您可以不使用DISPLAY
:
sudo -EH env DISPLAY= waylandapplication
Run Code Online (Sandbox Code Playgroud)
我正在寻找书面声明(路线图、设计页面...),而不是偏好或意见。
在Wayland的文件中提到WAYLAND_DISPLAY
,但我没有找到任何东西XDG_RUNTIME_DIR
。尽管如此,包括参考实现在内的所有 Wayland 合成器都weston
依赖于XDG_RUNTIME_DIR
.
如果WAYLAND_DISPLAY
在另一个位置,在同一个路域显示器上运行来自任意用户的应用程序不会有问题。但被XDG_RUNTIME_DIR
指定为对登录用户进行限制,并应包含与用户相关的套接字:
$XDG_RUNTIME_DIR 定义相对于用户特定的非必要运行时文件和其他文件对象(如套接字、命名管道等)应存储的基目录。该目录必须归用户所有,并且他必须是唯一具有读写权限的用户。它的 Unix 访问模式必须是 0700。
在wayland 上运行另一个用户或root 的问题与XDG_RUNTIME_DIR
规范有关,而不是与wayland 本身有关。如果您指定具有任意访问权限的自定义XDG_RUNTIME_DIR
输入/tmp
(从而破坏其规范),则所有用户都可以使用 Wayland 显示。
有一些希望未来不需要XDG_RUNTIME_DIR
,但这取决于实施:Wayland docu chap.4:
从 Wayland 1.15 开始,实现可以选择支持位于文件系统中任意位置的服务器套接字端点,方法是将 WAYLAND_DISPLAY 设置为服务器端点侦听的绝对路径。
小智 6
我ego
为此用例编写了(Alter Ego)。它不是 GUI 应用程序,但您可以作为另一个用户从控制台启动 GUI 应用程序,它会自动处理 xhost 和 Wayland 以及 PulseAudio 套接字共享:https://github.com/intgr/ego
诀窍是使用 Posix ACL 向另一个用户授予对 Wayland/PulseAudio 套接字的访问权限,并设置环境变量,以便目标用户的应用程序知道如何连接到它。
如果遇到问题,请在 GitHub 上提出问题。
归档时间: |
|
查看次数: |
3743 次 |
最近记录: |