Usando bash, wmctrl, xprop, ps
1) Para um programa ativo de longa duração:
Por exemplo, inicie um programa (ranger) em execução em um terminal, iniciado a partir da área de trabalho, altere o título uma vez, após algum atraso (5 segundos) quando o programa for iniciado:
startranger.sh:
#!/bin/bash
/usr/local/bin/changetitle.sh 5 ranger
/usr/local/bin/ranger
changetitle.sh:
#!/bin/bash
delay="$1"
shift
wintitle="$*"
winid='xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/''
/bin/bash -c "sleep $delay; wmctrl -i -r $winid -N \"$wintitle\"" &
2) Se você estiver executando uma sessão de terminal sem executar um programa ativo, atualize o título em um loop que termina quando o terminal sai:
changetitleloop.sh 1 maintenance for server
executar o acima irá atualizar o título do terminal atual a cada 1 segundo, mesmo se você cd
(pode mudá-lo várias vezes), usando:
changetitleloop.sh
#!/bin/bash
interval="$1"
shift
wintitle="$*"
termpid="$(ps -p $$ -o ppid= | sed -e 's/^[ \t]*//')"
winid='xprop -root | grep _NET_ACTIVE_WINDOW | head -1 | awk '{print $5}' | sed 's/,//' | sed 's/^0x/0x0/''
/bin/bash -c "ss=\$$; echo \$ss > /tmp/term-$termpid.pid; while x=\$(wmctrl -i -r $winid -N \"$wintitle\"); ret=\$?; sleep $interval; owner=\$(cat /tmp/term-$termpid.pid); [ \$ret -eq 0 ] && [ \$ss -eq \$owner ]; do continue; done;" &