コマンドライン上でのクリップボードの利用方法

クリップボードはコピー&ペーストでデータを一時的に保存しておく場所を指します。

文章だけでなく、画像やその他のデータも保存できます。


Linuxコマンドを触れるに当たって、コマンドラインインターフェース(Command Line Interface : CLI)上でのクリップボードは使えておいた方が捗りますので、見ていくことにします。




クリップボードの機能はディスプレイサーバに紐付いた機能になっていまして、サーバの種類によって操作方法は異なります。

Linuxのディスプレイサーバは主にWaylandとX11があり、2024年時点ではWaylandが主流になっているそうです。

WestonとPipewireで軽量のデスクトップ環境を構築してみる - Linux


上記内容を踏まえた上でCLIからクリップボードを利用してみます。




文字列をクリップボードにコピーした後、クリップボードの中身を確認してみます。

ターミナルを起動し、

$ echo $XDG_SESSION_TYPE

で使用中のディスプレイサーバを確認します。


結果はwayland、X11かttyの値が出力されます。




waylandの場合を見ていきます。

クリップボードとして利用するものとして、wl-clipboardを利用します。

bugaevc/wl-clipboard: Command-line copy/paste utilities for Wayland


ターミナルを開き、下記コマンドでwl-clipboardをインストールします。

$ sudo apt update
$ sudo apt install wl-clipboard
# インストールされているかの確認
$ wl-copy -v
wl-clipboard 2.2.1
Copyright (C) 2018-2023 Sergey Bugaev
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

のような値が出力されれば、wl-clipboardのインストールは終了です。


動作確認として、hello worldという文字列をクリップボードにコピーしてみます。

$ wl-copy "hello world"

Microやgedit等を起動し、文字列の貼り付けを確認してみます。

エディタを開き、Ctrl + vでカーソルを当てた個所にhello worldが挿入されます。


CLI上でのペースト(貼り付け)も確認しておきます。

$ wl-copy "hello world"
$ wl-paste > p.txt
$ cat p.ext



x11の場合を見ていきます。

クリップボードとして利用するものとして、xclipを利用します。

※xclipはWaylandでも使用できます。

astrand/xclip: Command line interface to the X11 clipboard


$ sudo apt update
$ sudo apt install xclip
# インストールされているかの確認
$ xclip -version
xclip version 0.13
Copyright (C) 2001-2008 Kim Saunders et al.
Distributed under the terms of the GNU GPL

のような値が出力されれば、xclipのインストールは終了です。


動作確認として、hello worldという文字列をクリップボードにコピーしてみます。

$ echo -n "hello world" | xclip -selection clipboard

Microやgedit等を起動し、文字列の貼り付けを確認してみます。

エディタを開き、Ctrl + vでカーソルを当てた個所にhello worldが挿入されます。

CLI上でのペースト(貼り付け)も確認しておきます。


$ echo -n "hello world" | xclip -selection clipboard
$ xclip -selection clipboard -out > p.txt
$ cat p.ext

xclipを実行する際に、オプションの-selectionで、どのセレクションを利用するか?を選択できます。

セレクションとはコンピュータのGUI環境において、ユーザーがコピーやカットしたテキストや画像などのデータを一時的に保持する領域のことで、アプリケーション間でデータをやり取りする際に利用されるそうです。


指定できるセレクションは

・primary:通常のコピー・ペーストで利用されるセレクション

・secondary:明確な用途が定まっていないセレクション

・clipboard:特定のアプリケーションで利用されるセレクション

・buffer-cut:help内に記載はあるが、どうやら使用されていないらしい

になります。




最後にttyになりますが、こちらにはコマンドで操作できるクリップボードはないそうです。

ttyはSSHでリモートアクセスしている場合になりまして、OSC 52を利用することになるそうです。


先に注意ですが、OSC 52はSSHの際のクライアント側(ターミナルを開いて、サーバにアクセスする時に使用するパソコン)で使用しているターミナルエミュレータによっては使用できません。


今回はクライアント側がクロームブックの標準のターミナルで、リモートアクセス先のパソコンをラズベリーパイOSということで話を進めます。




クロームブック側でターミナルを起動し、ラズベリーパイにSSHで接続します。

ラズベリーパイ側で下記のコマンドを実行して、osc52を使用できるようにします。

$ curl -L https://raw.githubusercontent.com/libapps/libapps-mirror/main/hterm/etc/osc52.sh -o osc52
$ chmod +x osc52
$ sudo mv osc52 /usr/local/bin/

これでosc52を使用できるようになりました。


試しにhello worldという文字列をクライアント側のクロームブックのクリップボードに保存してみます。

$ echo -n "hello world" | osc52

クロームブック側の何らかのアプリを起動して、Ctrl + vでhello worldが挿入されることを確認しましょう。


補足

クロームブックの標準のターミナルでは、特別な設定なくOSC 52で取得した値をクリップボードに保存出来ましたが、Ubuntuで使用するようなGNOME Terminalではサポートされておらず、使用出来なかったりします。


OSC 52を使用したい場合、使用中のターミナルが対応しているか?を事前に調べることにしましょう。

同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。