1. 序章

バッファは、コンピューティングのすべてのレベルに存在します。 将来の操作のためにデータを一時的に保存します。 クリップボードはそのようなバッファです。 この記事では、Linuxで端末からクリップボードを使用する方法について説明します。 この目的に向けて、クリップボードの実装と端末について説明します。

この記事のコードは、GNU Bash5.0.3を使用したDebian10.10(Buster)でテストされています。 これはPOSIXに準拠しており、そのような環境で機能するはずです。

2. クリップボード

クリップボードを他のバッファーと区別するのは、その使いやすさと遍在性です

クリップボードは、すべての主要なオペレーティングシステムの一部です。 これらは、アプリケーション内およびアプリケーション間のデータ転送を可能にします。 デフォルトの(多くの場合ユニバーサル)キーボードショートカットとマウスジェスチャにより、プロセスが簡単になります。

2.1. システム全体のクリップボード

システム全体のクリップボード(またはシステムクリップボード)は、すべてのアプリケーションからアクセスできます。特に、XウィンドウシステムXサーバーコンポーネントを介して、 Linuxのシステムクリップボード。 これには、 PRIMARY SECONDARY 、および CLIPBOARD の3つの部分(または選択)があります。 CLIPBOARD は通常、私たちのほとんどが「クリップボード」と呼ぶもののように機能します。

重要なのは、システムクリップボードはLinuxカーネルの一部ではないということです。  Xサーバーは、Linuxのアプリケーションで使用できる標準のシステムクリップボードを提供します。

2.2. 独立したクリップボード

独立したクリップボードは特定のアプリケーションに対応し、アプリケーションの境界を越えません。 さらに、独立したクリップボードは、システムクリップボードの内容を活用、オーバーライド、または無視できます。 どのアプリケーションでも、独自のクリップボードメカニズムを実装できます。

その結果、独立したクリップボードは、純粋なテキストベースの端末で特に価値があります。 以下でそれらについて説明します。

3. ターミナル

端末はコマンドラインインターフェイス(CLI) —テキスト入力のみを受け入れます。

端末は元々、画面とキーボードだけでした。 コンピュータとリモート通信するのに十分なメモリがありました。 Linuxの従来の端末に最も近いのは、Linuxコンソールです。 完全にカーネルに実装されています。 このため、Linuxコンソールはそれ自体でシステム全体のクリップボードをサポートしていません

従来の端末は、端末エミュレータに取って代わられました。 これらは、任意のローカルまたはリモートマシンで実行できます。 ターミナルエミュレータは、エミュレートしているターミナルにはない機能を追加できます。

4. システムクリップボードCLIアクセス

標準のCLIシステムクリップボードへのアクセスは、 xsel (X選択)および xclip (XクリップボードCLI)を介して行われます。 どちらも、リモートまたはローカルで実行されているXサーバーに依存しています。 それらの基本的な使用法は似ており、簡単です。

user@baeldung:~$ echo Copied via xsel. | xsel --input
user@baeldung:~$ xsel --output
Copied via xsel.
user@baeldung:~$ echo Copied via xclip. | xclip -in
user@baeldung:~$ xclip -out
Copied via xclip.

Xサーバーを実行せずにxselまたはxclipを使用しようとすると( xset で確認)、エラーが発生します。

user@baeldung:~$ xset q
xset: unable to open display ""
user@baeldung:~$ echo Copied via xsel. | xsel --input
xsel: Can't open display: (null)
: Inappropriate ioctl for device

xselやxclipなどのツールは、純粋なテキストベースの端末でXServerシステムクリップボードを使用するための唯一の選択肢です。

一方、GNOMEターミナルエミュレータKonsoleなどのターミナルエミュレータは追加のオプションを提供します。 それらのグラフィカルユーザーインターフェイス(GUI)の性質には、ネイティブマウスと、多くの場合、キーボードのサポートが含まれます。 このため、ユーザーはシステムクリップボードを介してテキストを簡単に選択、保存、および復元できます。 この機能は、リモートターミナルエミュレーター( Putty など)にも拡張されます。

5. 独立したクリップボードCLIアクセス

システムクリップボードが使用できない場合でも、クリップボードのような機能のオプションがあります。

5.1. 汎用マウス( gpm

端末の「テキスト入力のみ」のルールには抜け穴があることがわかりました。 これにより、クリップボード(マウス)を介してデータを保存および復元する最も自然な方法が可能になります。

gpm ソフトウェアパッケージは、サポートされている端末に基本的なマウスドライバーを提供します。 gpm デーモンを実行すると、反転した蛍光ペン文字がマウスカーソルを表します。 これは、文字マトリックスとともにマウスの動きを大まかに反映しています。

user@baeldung:~$ echo This is the output of a command.
This is the output of a command.               █
user@baeldung:~$

gpm パッケージには、現在表示されているデータに限定されたクリップボード機能があります。 ユーザーはテキストを選択して、プロンプト位置に直接転送できます。 この操作の後、データはどこにも保存されません。

5.2. Screen Manager( screen )およびTerminal Multiplexer( tmux

端末入力には、複雑なコードシンボルを含めることができます(端末コードおよび信号ショートカットを考えてください)。 たとえば、画面上の特定の場所でカーソル位置を変更できます。

screentmuxなどのターミナルマルチプレクサは、キーバインディングでこれらの命令を使用します。 これにより、ユーザーはさまざまなプロセスの複数の仮想コンソールを使用できます。 仮想コンソールは、同じ端末画面のウィンドウのような部分に配置されます。

画面内の各仮想コンソールとtmuxは、コピーアンドペーストメカニズムを提供します。 ユーザーは、ウィンドウの履歴をスクロールしてテキストを選択し、貼り付けバッファーに保存できます。 ペーストバッファの内容は、メインターミナルマルチプレクサプロセスに保持されます。 その後、どのウィンドウでも復元できます。

5.3. Viの改善( vi

viテキストエディタでは、アプリケーション内でのコピーアンドペースト操作も可能です。 たとえば、通常モードの vi Esc からアクセス)から、ユーザーは次のことができます。

  • yy –改行文字を含む現在の行をコピー(ヤンク)します
  • p –バッファ内の行を現在の行の後のテキストに貼り付ける(配置する)

5.4. カスタム実装

どのストレージタイプも、プリミティブクリップボードのタイプとして機能できます。

たとえば、Bashでは、clipfileを実装できます。

user@baeldung:~$ echo Copied via clipfile. > /tmp/clipfile
user@baeldung:~$ cat /tmp/clipfile
Copied via clipfile.

ただし、欠点には、不便さ、標準化の欠如、および有用性の制限が含まれます。

6. 結論

この記事では、端末でクリップボードを使用するさまざまな方法について説明しました。 まず、クリップボードとは何かを定義し、2つの異なるタイプのクリップボードについて説明しました。 次に、端末を介してシステムクリップボードにアクセスするためのツールを使用しました。 最後に、代替のクリップボードの実装について説明しました。

要約すると、端末クリップボードへのアクセスは複数の方法で可能です。 状況によっては便利なこともあります。