내 사용 사례는 클립보드에 무언가를 복사할 때마다 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