Wayland 会支持图形化的 sudo 吗?

lof*_*ops 4 su sudo wayland

在 X 桌面上,我偶尔使用gksudo或只是sudo somegui作为另一个用户(包括 root)启动 GUI 应用程序。我最近发现这在现代(2018 年初)Wayland 桌面上是不可能的。所有应用程序都必须以当前桌面用户的身份启动,并且仅限于该用户的权限。

这是 Wayland 的永久功能(按设计在那里),还是 su-ty​​pe 用法是尚未实施的增强功能?

我正在寻找书面声明(路线图、设计页面...),而不是偏好或意见。

mvi*_*eck 9

这是 Wayland 的永久功能吗(有意设计)

不,这与wayland 协议无关。而是环境设置的问题。

Wayland 使用一个套接字,其名称存储在WAYLAND_DISPLAY. 它位于XDG_RUNTIME_DIR通常设置为仅供用户访问的位置。但是 root 也可以访问它。(一些应用程序还会考虑XDG_SESSION_TYPE哪些可以有值waylandx11决定是使用 X 还是 Wayland。)

sudo删除大多数环境变量,包括XDG_RUNTIME_DIRWAYLAND_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)。这也将包括DISPLAYXAUTHORITY用于 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 上提出问题。

  • 现在,这是一个很棒的工具,谢谢! (2认同)