在“su - other-account”之後無法辨識 xsel
我是 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
。從這些資訊中,我發現以下工作:# 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 會話 cookiesu
,而無需更一般地向這些使用者開放您的 X 伺服器。
$HOME/.xauth/
這還允許通過其目錄中的配置文件對哪些使用者可以將憑據轉發給其他使用者進行細粒度控制。