Percebi que, às vezes, o conteúdo da área de transferência fica indisponível se o aplicativo de origem (de onde o conteúdo foi copiado) estiver fechado.
Isso me leva a pensar se é possível saber qual é o aplicativo de origem (por exemplo, talvez por PID).
Por quê? Se o aplicativo de origem for um terminal, eu gostaria de encontrar o diretório de trabalho do terminal, caso o conteúdo copiado seja um caminho relativo, para construir um caminho completo para um arquivo.
Para sua informação, atualmente estou usando o xclip para determinar o conteúdo da área de transferência, por exemplo
xclip -selection primary -t STRING -o 2> /dev/null
XGetSelectionOwner(3)
fornece o ID da janela do proprietário da seleção. A partir do qual você pode percorrer a árvore da janela para tentar encontrar uma janela com uma propriedade _NET_WM_PID, por exemplo, comxprop
(assumindo que a janela vem de um cliente local que define essa propriedade).xwininfo -root -tree | less +/0x<that-id>
pode ser suficiente para identificar o aplicativo.Respostas:
Eu escrevi uma ferramenta que retorna o nome simples do aplicativo (por exemplo, 'Terminal', 'gedit' ou 'SmartGit', que são os que eu testei). A maioria dos códigos é descaradamente roubada do @Harvey aqui .
fonte
gnome-terminal
iniciar apenas uma instância do aplicativo por sessão, em vez de uma instância por janela de terminal, como venerávelxterm
. Talvez seja por isso que você esteja vendo o mesmo PID em todos eles? Paragnome-terminal
você costumava ser capaz de desativar que misfeature com--disable-factory
(nome estranho para uma opção), mas aparentemente isso pode não ser mais possível . Enfim, parece que você precisa da senha de um dos processos em execução no terminal, não de si mesma.