CLIPBOARD -> PRIMARY選択を同期する簡単な方法は何ですか?

CLIPBOARD -> PRIMARY選択を同期する簡単な方法は何ですか?

私の使用例は、クリップボードに何かをコピーするたびにPRIMARYにも保存したいということです。人々は何かをコピーするためにそれを選択する必要があると思うことが多いので、ほとんどの場合、これを行う必要はありません。

ただし、既存の「クリップボードにコピー」ボタンをクリックして、基本コンテンツにないコンテンツをクリップボードにコピーすることもあります。私は貼り付けるためにShift+をたくさん使用しますがInsert、どの選択項目を使用しているかを追跡する必要があり、混乱しています。

同様の作業を実行できるツールがあることを知っていますが、起動してclipit忘れられる簡単なサービスparcelliteなど、GUIなしで何かをしたくありません。systemd

次のように構成されたsystemdサービスを試してみました。autocutsel

ExecStartPre=autocutsel -f
ExecStart=autocutsel -f --selection PRIMARY

ただし、これはPRIMARY - > CLIPBOARDも同期しているため、テキストを選択してクリップボードの内容に置き換えるなど、非常に一般的なワークフローを破ります。

のマンページでこのオプションを見つけましたが、autocutsel言及が多くcutbuffer(もはや使用されていないようです)、Windowsを使用しなかったので少し混乱しました。それで、これが可能かどうかはわかりませんautocutsel

ベストアンサー1

GTKのPyGObjectバインディングを使用してこれを行う高速Pythonプログラムは次のとおりです。私はこれの専門家ではないので、これは以前のFedoraバージョンでrpm pygobject2を使用して私に役立った例です。これに対応するパッケージを直接見つけなければなりません。

#!/usr/bin/python3
# copy clipboard to primary every time it changes
# https://unix.stackexchange.com/a/660344/119298
import signal, gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

# callback with args (Gtk.Clipboard, Gdk.EventOwnerChange)
def onchange(cb, event): 
    text = clipboard.wait_for_text() # convert contents to text in utf8
    primary.set_text(text, -1) # -1 to auto set length

signal.signal(signal.SIGINT, signal.SIG_DFL) # allow ^C to kill
primary = Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY)
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.connect('owner-change', onchange) # ask for events
Gtk.main() # loop forever

おすすめ記事