1. 程式人生 > 實用技巧 >linux安裝xclip實現終端與剪貼簿之間的通道

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列印到標準輸出,然後將其重定向到一個檔案或另一個程式

說明:

  1. X11 又稱為 X window 或 X 系統。X Window系統 (X11或X)是一種 點陣圖 顯示的 視窗系統 。它是在 Unix 和 類Unix 作業系統 ,以及 OpenVMS 上建立圖形使用者介面 的標準工具包和協議,並可用於幾乎所有已有的
    現代作業系統

    詳細介紹見 百度百科
  2. 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

執行過程:

說明:

  1. 按滑鼠中鍵,將 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 測試

  1. 當用 -selection primary 選項或省略時(預設值),如果你想要黏貼 Primary 中的資料,按下滑鼠的中鍵,可在目標視窗貼上資料。
  2. 當用 -selection clipboard, 如果你想黏貼Clipboard中的資料,滑鼠右鍵,在彈出框中選擇貼上即可。

Note:

  1. primary 和 clipboard 中的資料在記憶體中儲存在不同的位置,工作機制存在差異。
  2. 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

參考

  1. xclip github
  2. X window selection --- xclip
  3. X window link1, X window link2, X11(也叫做X Window系統)
  4. Wayland
  5. linux 命令大全: https://ipcmen.com/
  6. ubuntu 安裝常用小工具
(本文完)