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