Linux デスクトップにおけるクリップボードの性質

f:id:masm11:20210319205809p:plain

こんにちは、masm11 です。

今回はかなり毛色を変えて、デスクトップのある身近な機能について プログラム的な話をしようと思います。

その機能とは、クリップボードです。

セレクションとは

Linux デスクトップにおいて、「クリップボード」と、それと似たものがあるのは、 割と有名なことだと思っています。

以下の 3つがあって、まとめて「セレクション」と呼びます。

  • PRIMARY
  • SECONDARY
  • CLIPBOARD

ユーザの観点から使い方の違いを説明します。

CLIPBOARD はそのままクリップボードとして使われます。 ctrl+c でコピーして ctrl+v でペーストするやつです。

一方 PRIMARY は、範囲をマウスで選択すると、それだけでその範囲がコピーされます。 そして3ボタンマウスの中ボタンでペーストすることができます。

では SECONDARY とは何でしょうか? これは実は特に用途が決まっていません。

プログラム的には

セレクションは3つあり、ユーザから見た違いを説明しました。 では、プログラム的に違いはあるのでしょうか。

実はプログラム的には 3つは全く同じように使えます。

  1. コピー時に、アプリAが「PRIMARY を所有します」と宣言する。
  2. 他のアプリBが PRIMARY を使ってペーストしたい時は、B がデスクトップ経由で A を特定する
  3. B が A に接続する
  4. A と B との間でデータ型をネゴる
  5. A から B へデータを転送する

こんな感じです。PRIMARY でなく CLIPBOARD を使いたい時は CLIPBOARD に置き換えるだけです。

ただし、PRIMARY と CLIPBOARD とではユーザの使い方が違いますので、 そこは「所有します」と宣言するタイミングを変える必要はあります。

インターネット上の記事によっては「PRIMARY と CLIPBOARD はプログラム的な扱いも異なる」と 書いてあることがありますが、3つとも使い方は同じで、ユーザへの見せ方が違うだけです。

データ転送方法

Linux デスクトップのセレクションが、macOS や Windows のクリップボードと内部的に大きく 異なるのは、データの転送方法だと思います。

先程説明したとおり、アプリ同士が直接接続を張って、直接やりとりしています。

デスクトップは何をやっているかと言うと、セレクションを誰が所有しているかを管理しているだけです。 「PRIMARY を所有します」と宣言すると、PRIMARY を所有するアプリの情報を更新し、 別のアプリから「PRIMARY は誰が所有してるか?」と尋ねられたら、どのアプリが所有しているかを 返答します。

デスクトップはデータそのものは持ちません。 CLIPBOARD という名称ではありますが、クリップボードデータは持っていないのです。

他のデスクトップとの違い

ここで疑問に思われる方もいらっしゃるでしょう。

コピー操作をした後、そのアプリを終了したら、ペーストできるのか?

Linux デスクトップではペーストできません。 接続先アプリが存在しないし、 そもそもアプリ終了時点でそのセレクションを誰も持っていない状態になるからです。 ただし、クリップボードマネージャを使っている場合を除きます。

Linux デスクトップを使ってる方は試してみてください。

ここが Linux デスクトップのクリップボードが macOS や Windows のクリップボードと ユーザ視点で大きく異なる点だと思います。

まとめ

Linux デスクトップにおけるセレクション3つについて、 ユーザ視点での違い、プログラム的な違いを説明し、 さらに他のデスクトップのクリップボードとの大きな違いを説明しました。

本当は最後の段落が書きたかっただけです。

弊社には業務で Linux デスクトップを使っている人がいますが、 きっとそのクリップボードがそういうものだとは気づいていないと思います。

Linux デスクトップをこよなく愛するそこのあなた! 業務で Linux デスクトップを 使える日を夢見ながら一緒にインゲージで働きませんか? 詳細は以下のページへ!

https://ingage.co.jp/recruit