Então, depois de algum trabalho de depuração, finalmente pude rastrear o problema até a detecção do usuário por pinky
. Por alguma razão estranha pinky -fw
não listará a exibição do usuário em circunstâncias normais. Somente depois de iniciar uma sessão de raiz é possível detectar a exibição correta:
# DEBUG OUTPUT WITHOUT ROOT SESSION
##################
displaynum: 0 # correct
##################
pinkyfw: bob tty7 04:09 Aug 18 17:59
pinky: Login Name TTY Idle When Where
bob Bob tty7 04:09 Aug 18 17:59 # notice the missing
################## # information on display used
pinkytest: bob # testing a workaround
user: # empty because awk didin't find a match for ":0" in pinky -fw
##################
# DEBUG OUTPUT WITH ROOT SESSION
##################
displaynum: 0 # correct
##################
pinkyfw: bob tty7 04:04 Aug 18 17:59
bob pts/3 Aug 18 21:59 :0
pinky: Login Name TTY Idle When Where
bob Bob tty7 04:04 Aug 18 17:59
bob Bob pts/3 Aug 18 21:59 :0 # after starting a root session
##################
pinkytest: bob
user: bob # awk found a match for ":0"
##################
# DEBUG OUTPUT WITHOUT ROOT SESSION, WORKAROUND APPLIED
##################
displaynum: 0 # correct
##################
pinkyfw: bob tty7 04:09 Aug 18 17:59
pinky: Login Name TTY Idle When Where
bob Bob tty7 04:09 Aug 18 17:59
##################
pinkytest: bob
user: bob
##################
Esta é a solução que apliquei:
getXuser() {
user='pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }''
if [ x"$user" = x"" ]; then
startx='pgrep -n startx'
if [ x"$startx" != x"" ]; then
user='ps -o user --no-headers $startx'
fi
fi
if [ x"$user" = x"" ]; then # lines added
user=$(pinky -fw | awk '{ print $1; exit; }') # lines added
fi # lines added
if [ x"$user" != x"" ]; then
userhome='getent passwd $user | cut -d: -f6'
export XAUTHORITY=$userhome/.Xauthority
else
export XAUTHORITY=""
fi
export XUSER=$user
}
Infelizmente, ainda não sei o suficiente sobre pinky
e gerenciamento de usuários no Linux para saber se essa solução alternativa pode criar ainda mais problemas. Eu acho que é melhor do que simplesmente codificar o nome do usuário e exibir no arquivo (que nem funcionou quando eu tentei).