我是 Linux 新手,并使用此过程将以下版本的 Ubuntu 设置为 VirtualBox VM :
ubuntu-20.04.3-desktop-amd64.iso
创建的第一个帐户是管理员帐户。我安装xsel
并检查它是否有效。然后我创建了一个非管理员帐户并su
使用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 -ib
或echo dog | xsel -ip
.
我目前的计划是写入或重定向到(比如说)/tmp/tmp.txt
在从登录屏幕登录的用户与从登录屏幕登录的用户之间传递文本su
。我习惯了 Cygwin 的行为,无论终端在哪个帐户下启动,剪贴板都是共享的。
故障排除
如果我登录非管理员帐户和管理员帐户,我会得到相同的行为su
。 xsel
在我登录的非管理员帐户中工作,而不是在我登录的管理员帐户中工作su
。
本质上,xsel
在su
.
根据评论,我查看了这个问题的答案。 我不认识问题描述,因为错误消息完全不同,因此根据错误消息查看的人不会识别该问题。此外,我不明白答案。看起来它可能适用于我的解决方案的一点是xhost +localhost
,但它不起作用,因为语法错误,至少对于我正在使用的 Ubuntu 版本。我在下面的答案中发布了有效的语法。
我认为在上面引用的页面甚至可以远程通知某人之前,您必须知道问题是缺少帐户访问 X 服务器的权限。例如,如果您来自使用 Cygwin 的 X-windows 的背景,您可能不会猜到这一点,因为问题并没有在那里表现出来。
根据waltinator的评论,我在 using 上找到了这个页面
xhost
。从这些信息中,我发现以下工作:一次添加一个用户的有用替代方法是
xhost +local:
,它允许任何本地用户打开客户端窗口。这意味着您信任登录到该计算机的每个人。因此,这只能在受控环境中完成,例如单用户机器。在许多环境中,PRIMARY 选择也可以从 register 粘贴到 [G]Vim 中
*
。同样,CLIPBOARD 缓冲区通常可以从 register
+
或任何其他使用 Ctrl+V 的应用程序粘贴到 [G]Vim 中。您可以使用
pam_xauth
身份验证模块跨调用转发 X11 会话 cookiesu
,而无需更一般地向这些用户开放您的 X 服务器。$HOME/.xauth/
这还允许通过其目录中的配置文件对哪些用户可以将凭据转发给其他用户进行细粒度控制。