
Configurei lirc
para controlar meu PC com um controle remoto. Para alternar entre os diferentes modos que editei.lircrcdo seguinte modo:
begin vlc
include ~/.lirc/vlc
end vlc
begin gnome
include ~/.lirc/gnome
end gnome
begin firefox
include ~/.lirc/firefox
end firefox
begin me-tv
include ~/.lirc/me-tv
end me-tv
begin
prog = irexec
button = KEY_YELLOW
config = if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
mode = vlc
end
begin
prog = irexec
button = KEY_GREEN
mode = gnome
end
begin
prog = irexec
button = KEY_RED
config = if [ -n $(pgrep -x firefox) ]; then (firefox &); fi
mode = firefox
end
begin
prog = irexec
button = KEY_BLUE
config = if [ -n $(pgrep -x me-tv) ]; then (me-tv &); fi
mode = me-tv
end
Tudo funciona bem com ele - exceto mudar para o Firefox: quando o Firefox está em execução e eu pressiono o botão vermelho, ele muda o modo (como deveria)e abre uma segunda janela/instância do Firefox (como não deveria).
O problema aparece apenas com o Firefox.
Edit
→ Preferences
→ Tabs
→ Open new windows in a new tab instead
já está ativado:
O que acontecequando o Firefox está em execuçãoe eu começo firefox
em um terminal?
firefox
- uma segunda janela se abrefirefox about:startpage
- uma nova aba no Firefox abre com a página inicial pré-configurada- (!)
firefox about:blank
- uma nova aba no Firefox abre com minha página inicial pessoal (Discagem rápida) firefox chrome://speeddial/content/speeddial.xul
(que é o endereço da página inicial do Speeddial)- nada acontece
O que acontecequando o Firefox não está em execuçãoe eu começo firefox
em um terminal?
firefox
- O Firefox abre conforme configurado emPreferences
(Show my windows and tabs from last time
)firefox about:startpage
- O Firefox abre com uma nova aba adicional com a página inicial pré-configurada- (!)
firefox about:blank
- O Firefox abre com uma nova guia adicional em branco firefox chrome://speeddial/content/speeddial.xul
- O Firefox não abre:*** Preventing external load of chrome: URI into browser window.
Use -chrome <uri> instead
Então, quando eu modifico o comando no script ( config = ...
) e adiciono um endereço como about:blank
ele resolve parcialmente o problema. Como o problema permanece é quenão coloca o Firefox em primeiro planoquando já está em execução. Isso só aconteceàs vezes.
Alguém poderia me ajudar a editar este script para corrigir esse mau comportamento?(Fontedo script que eu modifiquei.)
Responder1
Parte do código shell dessefontenão faz o que afirma fazer; principalmente o tipo que vai:
if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
Isso ocorre vlc &
em dois casos. Se não houver processos correspondentes a "vlc" e se houver exatamente um processo correspondente a "vlc". Se houver mais de um processo correspondente a "vlc", vlc &
não será executado. Portanto, esses blocos if são bastante inúteis. Apenas correr vlc &
provavelmente será mais correto.
Infelizmente, conselhos ruins sobre shell são comuns na Internet.
A partir da descrição do seu problema, o resultado que você deseja é que o programa seja executado, se ainda não estiver em execução, e se estiver em execução, traga essa janela para a frente e dê foco a ela. Para fazer isso, wmctrl
poderia ser usado.
wmctrl -a 'Mozilla Firefox'
encontrará uma janela contendo "Mozilla Firefox" no título e a "ativará". Ou seja, vá até o espaço de trabalho em que ele está, traga-o para frente e dê foco. Em segundo lugar, se nenhuma janela corresponder, o wmctrl não fará nada e sairá com um status de saída diferente de zero (falso). Nesse caso, podemos assumir que o programa não está em execução e, em vez disso, iniciá-lo.
wmctrl -a 'Mozilla Firefox' || firefox &
Ainda não é perfeito. Outras janelas além das janelas do Firefox podem conter essa string em seu título, portanto, devemos encontrar uma maneira mais confiável de identificar a janela correta neste caso.
Com -x, o wmctrl operará no VM_CLASS de uma janela, que normalmente terá um valor exclusivo por programa. Todas as janelas do Firefox terão VM_CLASS "Navigator.Firefox" como pode ser visto executando wmctrl -lx
enquanto o Firefox está em execução
$ wmctrl -lx
...
0x03ba3d43 3 gnome-terminal.Gnome-terminal pilot Terminal
0x04c000bc 0 Navigator.Firefox pilot Group #1 - Speed Dial - Mozilla Firefox
Com isso podemos selecionar a janela que possui exatamente "Navigator.Firefox" como VM_CLASS
wmctrl -Fxa Navigator.Firefox || firefox &
Esperamos que o mesmo seja aplicável a outros programas.