X11

在“su - other-account”之後無法辨識 xsel

  • November 15, 2021

我是 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 -ibecho dog | xsel -ip.

我目前的計劃是寫入或重定向到(比如說)/tmp/tmp.txt在從登錄螢幕登錄的使用者與從登錄螢幕登錄的使用者之間傳遞文本su。我習慣了 Cygwin 的行為,無論終端在哪個帳戶下啟動,剪貼板都是共享的。


故障排除

如果我登錄非管理員帳戶和管理員帳戶,我會得到相同的行為suxsel在我登錄的非管理員帳戶中工作,而不是在我登錄的管理員帳戶中工作su

本質上,xselsu.

根據評論,我查看了這個問題的答案 我不認識問題描述,因為錯誤消息完全不同,因此根據錯誤消息查看的人不會辨識該問題。此外,我不明白答案。看起來它可能適用於我的解決方案的一點是xhost +localhost,但它不起作用,因為語法錯誤,至少對於我正在使用的 Ubuntu 版本。我在下面的答案中發布了有效的語法。

我認為在上面引用的頁面甚至可以遠端通知某人之前,您必須知道問題是缺少帳戶訪問 X 伺服器的權限。例如,如果您來自使用 Cygwin 的 X-windows 的背景,您可能不會猜到這一點,因為問題並沒有在那裡表現出來。

根據waltinator的評論,我在 using 上找到了這個頁面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 *。 同樣,CLIPBOARD 緩衝區通常可以粘貼到

$$ G $$來自 register 的 Vim +,或來自任何其他使用 Ctrl+V 的應用程序。

您可以使用pam_xauth身份驗證模組跨呼叫轉發 X11 會話 cookie su,而無需更一般地向這些使用者開放您的 X 伺服器。

$HOME/.xauth/這還允許通過其目錄中的配置文件對哪些使用者可以將憑據轉發給其他使用者進行細粒度控制。

引用自:https://unix.stackexchange.com/questions/676087