Possivelmente, algo está constantemente roubando a seleção X. Para descobrir quem é. Você poderia compilar isso:
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
int main() {
printf("%#lx\n", XGetSelectionOwner (XOpenDisplay(0), XA_PRIMARY));
return 0;
}
Com:
gcc that-file.c -lX11
Esse código é retornar o ID da janela do proprietário da seleção PRIMARY
X. Em seguida, você pode usar xdotool
para obter o PID do processo que possui essa janela (supondo que Window seja de um cliente local e que ele permita que o Gerenciador de Janelas saiba seu PID):
ps -fp "$(xdotool getwindowpid "$(./a.out)")
Se você não tem xdotool
, pode fazê-lo da maneira mais difícil: você pode procurar essa ID de janela na saída de xwininfo -root -all
:
xwininfo -root -all | less "+/$(./a.out)"
A janela que possui a seleção pode não ter um nome, mas você pode ver seu pai ou avô para obter mais dicas. Depois de encontrar o ancestral que é gerenciado pelo gerenciador de janelas, você pode obter o ID do processo (supondo que a janela seja exibida por um processo local) com:
xprop -id that-id _NET_WM_PID
Exemplo:
$ xwininfo -root -wm -tree | grep -B3 "$(./a.out)"
24 children:
0x2800024 "Sun 12 May - 21:40 - zsh (2)": ("xterm" "XTerm") 1920x1059+0+19 +0+19
1 child:
0x280002f (has no name): () 1920x1059+0+0 +0+19
0x280002f possui a seleção PRIMARY, cujo pai é "xterm" (0x2800024 gerenciado pelo Gerenciador de Janelas).
$ xprop -id 0x2800024 _NET_WM_PID
_NET_WM_PID(CARDINAL) = 9707
$ ps -fp 9707
UID PID PPID C STIME TTY TIME CMD
chazelas 9707 1 0 08:50 ? 00:00:02 xterm
E esse é o seu pid.
Depois de saber quem é o proprietário dessa seleção, pode ficar mais claro o que está acontecendo.