Я помітив, що іноді вміст буфера обміну стає недоступним, якщо вихідна програма (куди було скопійовано вміст) закрита.
Це змушує мене замислитися, чи можна дізнатися, що таке програма-джерело (наприклад, можливо, PID).
Чому? Якщо вихідним додатком є термінал, я хотів би знайти робочий каталог терміналу, якщо скопійований вміст є відносним шляхом, щоб побудувати повний шлях до файлу.
FYI, я зараз використовую xclip для визначення вмісту буфера обміну, наприклад
xclip -selection primary -t STRING -o 2> /dev/null
Що сказав @ StéphaneChazelas Але майте на увазі, що навряд чи ви отримаєте надійний PID іншого клієнта з X11. Пам’ятаючи, що клієнти X підключаються до X-серверів за допомогою загальних мережевих підключень (UNIX-сокет або TCP-сокет), PID може бути безглуздим, оскільки програма може бути не локальною. Він може бути підключений через TCP (більше не поширений в ці дні) або передане SSH-з'єднання X11 (більш поширене).
—
Селада
Дякую за замітки - я припускаю, що мені потрібно буде написати якийсь код C для доступу до XGetSelectionOwner? Я, мабуть, можу це зробити - я відправлю назад, коли прийду до рішення.
—
Джефф Уорд
XGetSelectionOwner(3)
отримує ідентифікатор вікна власника вибору. З якого ви можете підійти до дерева вікон, щоб спробувати знайти вікно з властивістю _NET_WM_PID, наприклад, зxprop
(якщо припустити, що вікно походить від локального клієнта, який встановлює цю властивість).xwininfo -root -tree | less +/0x<that-id>
може бути достатньо для ідентифікації програми.