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

관련 정보