linux安裝xclip實現終端與剪貼簿之間的通道
概要: ubuntu 20.04 通過安裝 xclip 來實現終端與剪貼簿之間的資料通道:xclip 類似 dos 中的 clip命令,xclip 可將命令執行的結果儲存到剪貼簿,還允許將檔案的內容直接放入剪貼簿 ,使用 xclip -o 命令可檢視剪貼簿中的內容。
目錄What's xclip
xclip github官方倉庫
xclip is a command line utility that is designed to run on any system with an X11 implementation. It provides an interface to X selections ("the clipboard") from the command line. It can read data from standard in or a file and place it in an X selection for pasting into other X applications. xclip can also print an X selection to standard out, which can then be redirected to a file or another program.
譯
xclip 是一個命令列實用程式,設計用於執行在任何有X11實現的系統上。它提供了一個從命令列進行X selection(“剪貼簿”)的介面。它可以從標準輸入或檔案中讀取資料,並將其放在X selection中,以便貼上到其他X應用程式中。xclip還可以將X selection列印到標準輸出,然後將其重定向到一個檔案或另一個程式。
說明:
- X11 又稱為 X window 或 X 系統。X Window系統 (X11或X)是一種 點陣圖 顯示的 視窗系統 。它是在 Unix 和 類Unix 作業系統 ,以及 OpenVMS 上建立圖形使用者介面 的標準工具包和協議,並可用於幾乎所有已有的
詳細介紹見 百度百科 - X終端是做為X客戶機在X伺服器上執行的專用硬體。該架構廣泛用於為了你多人同時使用同一個大型伺服器而構造終端。這也符合MIT的計劃的初衷。 X終端搜尋網路,使用 XDMCP 產生允許其執行客戶機的主機列表。 初始主機需要執行
X display manager
。 專用的X終端(硬體)已經不堪常見了,經常使用 個人計算機來完成相同的功能。
X selection (X11 黏貼板)的說明
wayland or X11
檢查自己使用的是wayland還是X11,使用這個命令
echo $XDG_SESSION_TYPE
Wayland是一個簡單的“顯示伺服器”(Display Server),與X Window屬於同一級的事物,而不是僅僅作為X Window下X Server的替代(注:X Window下分X Server和X Client)。也就是說,Wayland不僅僅是要完全取代X Window,而且它將顛覆
Linux桌面上X Client/X Server的概念,以後將沒有所謂的“X Client”了,而是“Wayland Client”。
Wayland 更詳細的介紹 參見。
X11 selection 類別及詳細介紹
在X11中,有兩種黏貼板:selections 和 cut-buffer。兩者的機制是不同的。
selection
selection中 的內容由提供的應用程式維護,從 selection 取資料的程式要向原引用程式索取資料。當原應用程式退出時,你也要不到這段資料了。selection其實由三部分構成:Primary,Secondary,Clipboard。其中Secondary表現 ill-defined,我們不會再提到它。如果你想要黏貼 Primary 中的資料,按下滑鼠的中鍵,如果你想黏貼Clipboard中的資料,滑鼠右鍵,在彈出框中選擇貼上。
cut-buffer
cut-buffer由cut-buffer0-7 , 8個buffer構成。cut-buffer 中的資料由X-server維護。如果你不知道什麼是x-server,...。只有當x-server退出時(如log out),資料才會消失。也就是說cut-buffer中的資料較為持久,但cut-buffer是一種old and outdated的技術。
目前 cut-buffer 機制基本被廢棄,以下主要說明 selection 中的 Primary 和 Clipboard 機制。
xclip 安裝 (in ubuntu 20.04)
xclip github官方倉庫
ubuntu 預設未安裝 xclip 命令,可以通過 sudo apt-get install xclip
命令安裝。
筆者在 ubuntu 20.04 安裝時遇到以下錯誤:
/usr/bin/mandb: 無法建立索引快取 /var/cache/man/oldlocal/zh_CN/9796: 沒有那個檔案或目錄
雖然出現以上安裝錯誤,但實際上 xclip 仍然成功安裝了。
xclip -version
檢視 xclip 的版本資訊:
可用:xclip -h
檢視 xclip 命令的語法 或 查閱 man 手冊:man xclip
.
xclip 用法詳解
xclip man手冊
名稱
xclip - X selections(剪貼簿)與命令列之間的介面
語法
xclip [選項] [檔案]...
描述
從標準輸入或從一個或多個檔案中讀取資料,並使資料作為X selection可用,以便貼上到X應用程式中。列印當前X selection 到標準輸出。
-i, -in
將標準輸入或檔案中的文字讀入X selection中(預設)
這個預設選項一般都省略。
-o, -out
將selection中資料列印到標準輸出(通常用於建立和檔案或程式之間的管道)
-f, -filter
當xclip在輸出級別設定為silent(預設值)的in模式下被呼叫時,
filter選項將導致xclip列印由標準輸入管道輸送到標準輸出的未經修改的文字
-r, -rmlastnl
當所選內容的最後一個字元是換行符時,將其刪除。
不是 selection 中的最後一個字元的換行字元不受影響。如果選擇沒有以換行符結束,則此選項無效。
對於將類似於pwd的程式的單行輸出複製到剪貼簿,再次將其貼上到命令提示符中,由於換行符 pwdappends,無需立即執行該行,此選項非常有用。
-l, -loops
退出之前等待的X selection請求的數量(貼上到X應用程式中),值為0(預設值)導致xclip等待無限數量的請求,
直到另一個應用程式(可能是另一個呼叫xclip的應用程式)獲得selection的所有權
-t, -target
使用給定的目標原子指定特定的資料格式。
通過-o,可以使用特殊的目標原子名稱“TARGETS”來獲得用於此選擇的有效目標原子列表。
有關目標原子的更多資訊,請參閱ICCCM第2.6.2節
-d, -display
X display to use (e.g. "localhost:0"),如果該選項被省略,xclip預設為$DISPLAY中的值。
-h, -help
列印 xclip 選項簡要說明資訊
-selection
指定要使用哪個X selection,使用XA_PRIMARY(預設)的選項是“primary”,
使用XA_SECONDARY的選項是“secondary”,(未用)
使用XA_CLIPBOARD的選項是“clipboard”
“buffer-cut” 已被廢棄。
常用的主要選項:primary 和 clipboard。
-version
顯示 xclip 版本資訊
-silent
fork到後臺等待請求,沒有資訊輸出,除非有錯誤發生 (xclip 預設在後臺執行)
-quiet 在終端上顯示資訊訊息並在前臺執行
-verbose
列印 xclip 執行時詳細資訊
-noutf8
在遺留模式下操作(例如,非UTF-8)以實現向後相容性
(只有在真正需要時才使用此選項,因為舊的行為已經被打破)
xclip 預設是在 utf-8 模式下操作。
環境
DISPLAY
X display to use if none is specified with the -display option.
說明:
xclip從標準輸入或檔案中讀取文字,並將其提供給其他X應用程式,以作為X selection 貼上(通常是通過中間的滑鼠按鈕)。它從指定的所有檔案中讀取,如果沒有指定檔案,則從標準輸入中讀取。xclip也可以用-o選項列印選擇的內容到標準輸出。
xclip 被設計為允許更緊密地整合 X 應用程式和命令列程式。預設的操作是在後臺靜默等待X selection 請求(貼上),直到另一個X應用程式將資料放入剪貼簿,此時xclip會靜默退出。
您可以使用-verbose選項來檢視xclip是否以及何時實際收到來自其他X應用程式的選擇請求。
選項可以縮寫,只要它們保持明確。例如,可以使用-d或-disp代替-display。但是,不能使用-v,因為它是不明確的(它可以是-verbose或-version的縮寫),因此它將被解釋為檔名。
注意,只有 selection 用 -selection選項指定的第一個字元選項比較重要。這意味著“p”、“sec”和“clip”分別與“primary”、“secondary”或“clipboard”具有相同的效果。
示例:
1.把 uptime 程式的執行結果放在X selection。然後在X應用程式中單擊中間進行貼上。
$ uptime
# 把 uptime 程式的執行結果放在X selection
$ uptime | xclip
# 按滑鼠中鍵,將 PRIMARY selection中資料貼上到終端
# 將 PRIMARY selection中資料輸出到終端
$ xclip -o
執行過程:
說明:
- 按滑鼠中鍵,將 PRIMARY selection中資料貼上到終端時,多輸出 1行,提示 “未找到命令”。
原因是:程式執行結果如果只有單行,在終端列印時,會自動加上換行符,而在終端輸出的文字+換行符會自動將文字作為命令執行,因為此命令不存在,故提示此資訊。
解決方案:在 將 uptime 執行結果 複製到 selection 中時,加上 -r 選項,刪除文字中最後一個換行符(當最後一個字元為換行符時)即:uptime | xclip -r
修改後的程式執行結果:
2.在/etc/motd(當天資訊)貼上10次後退出。顯示已經處理了多少選擇請求(貼上)
xclip -loops 5 -verbose /etc/motd
以上命令執行後,當在另一個終端按滑鼠中鍵複製一次,這個終端將輸出1次請求,請求數加1.當按 ctrl+c可提前退出。
3.將剪貼簿中資料寫入 helloworld.c 檔案中
xclip -o > helloworld.c
4.將 thread.c 檔案讀入 selection,並輸出到 thread2.c 檔案中
xclip thread.c
xclip -o > thread2.c
5.在支援HTML的X應用程式中單擊中鍵,將給定檔案的內容貼上為HTML
xclip -t text/html index.html
6.-selection選項值 primary 和 clipboard 測試
- 當用
-selection primary
選項或省略時(預設值),如果你想要黏貼 Primary 中的資料,按下滑鼠的中鍵,可在目標視窗貼上資料。 - 當用
-selection clipboard
, 如果你想黏貼Clipboard中的資料,滑鼠右鍵,在彈出框中選擇貼上即可。
Note:
- primary 和 clipboard 中的資料在記憶體中儲存在不同的位置,工作機制存在差異。
xclip -o
只能輸出 primary selection 中的資料,不能輸出 clipboard selection 中的資料。
如果要輸出 clipboard selection 中的資料,需要加-selection clipboard
選項,即:xclip -o -selection clipboard
程式驗證
7.將 XA_PRIMARY 資料複製到 XA_CLIPBOARD
xclip -o | xclip -sel clip
8.在vim的命令模式下,選擇一些文字行,然後按shift-:作為一個ex提示,並使用此命令複製選定的文字行到 primary X selection:
!xclip -f
參考
- xclip github
- X window selection --- xclip
- X window link1, X window link2, X11(也叫做X Window系統)
- Wayland
- linux 命令大全: https://ipcmen.com/
- ubuntu 安裝常用小工具