“su - other-account”后无法识别 xsel

“su - other-account”后无法识别 xsel

我是 Linux 新手,并且已使用以下命令将以下版本的 Ubuntu 设置为 VirtualBox VM这个流程

ubuntu-20.04.3-desktop-amd64.iso

创建的第一个帐户是管理员帐户。我安装xsel并检查它是否有效。然后我创建了一个非管理员帐户并su使用 d 进入该帐户su - non-admin-account。那时,xsel抱怨:

xsel: Can't open display: (null)
: Inappropriate ioctl for device

在登录另一个帐户后,我需要做什么才能xsel访问?su

su目前,我对启动在进入非管理员帐户时启动自己的客户端窗口的应用程序不感兴趣。我只想要简单的管道标准输出到剪贴板,以便我可以使用 Shift+Ins 在 Vim 或 Bash 命令行中检索它,例如echo dog | xsel -ibecho dog | xsel -ip

我当前的计划是编写或重定向到(例如)/tmp/tmp.txt在从登录屏幕登录的用户与登录屏幕登录的用户之间传递文本su。我习惯了 Cygwin 的行为,无论终端在哪个帐户下启动,剪贴板都会共享。


故障排除

如果我登录非管理员帐户和su管理员帐户,我会得到相同的行为。 xsel在我登录的非管理员帐户中工作,但在我su登录的管理员帐户中工作。

本质上,xselsu.

根据评论,我看了这个问题的答案 我无法识别问题描述,因为错误消息非常不同,因此根据错误消息查找的人不会识别该问题。此外,我不明白这些答案。看起来可能适用于我的解决方案的是xhost +localhost,但它不起作用,因为语法错误,至少对于我正在使用的 Ubuntu 版本是错误的。我发布的语法是在我下面的回答中工作。

我认为,在上面引用的页面甚至可以远程通知某人之前,您必须知道问题是缺少帐户访问 X 服务器的权限。例如,如果您有使用 Cygwin 的 X-windows 的背景,您可能不会猜到这一点,因为问题并没有在那里显现出来。

答案1

您可以使用pam_xauth身份验证模块可跨su调用转发 X11 会话 cookie,而无需更广泛地向这些用户开放 X 服务器。

这还允许通过目录中的配置文件对哪些用户可以将凭据转发给哪些其他用户进行细粒度控制$HOME/.xauth/

答案2

基于瓦尔特纳的评论,我发现这一页关于使用xhost.从这些信息中,我发现以下内容可行:

# Log into admin-username from the login screen,
# then issue:
$ xhost +SI:localuser:nonadmin-username

   localuser:nonadmin-username being added to access control
   list.

$ xhost

   SI:localuser:nonadmin-username
   SI:localuser:admin-username

$ su - nonadmin-username
# Enter password when prompted

# Match DISPLAY to its value in the admin account
$ export DISPLAY=:0

$ ls | xsel -ip # Use PRIMARY selection e.g. X-windows mouse highlighting
$ ls | xsel -ib # Use CLIPBOARD buffer e.g. Windows's Ctrl+C/X/V
$ exit # Exit the "su" session

# Paste then works in admin account as expected.
# To test the PRIMARY selection:
$ cat # In admin account
# Paste using middle mouse button or Shift+Ins
Ctrl+D to end input into "cat"

一次添加用户的一种有用替代方法是xhost +local:,它允许任何本地用户打开客户端窗口。这意味着您信任登录到该计算机的每个人。因此,这只能在受控环境中完成,例如单用户计算机。

在许多环境中,PRIMARY 选择也可以从寄存器粘贴到 [G]Vim 中*

同样,剪贴板缓冲区通常可以从寄存器+或任何其他使用 Ctrl+V 的应用程序粘贴到 [G]Vim 中。

相关内容