クリップボードはコピー&ペーストでデータを一時的に保存しておく場所を指します。
文章だけでなく、画像やその他のデータも保存できます。
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を使用したい場合、使用中のターミナルが対応しているか?を事前に調べることにしましょう。