
Lo configuré lirc
para controlar mi PC con un control remoto. Para cambiar entre diferentes modos que edité.lircrccomo sigue:
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
Todo funciona bien, excepto cambiar a Firefox: cuando Firefox se está ejecutando y presiono el botón rojo, cambia el modo (como debería)y abre una segunda ventana/instancia de Firefox (como no debería).
El problema aparece sólo con Firefox.
Edit
→ Preferences
→ Tabs
→ Open new windows in a new tab instead
ya está habilitado:
Lo que sucedecuando Firefox se está ejecutandoy empiezo firefox
en una terminal?
firefox
- se abre una segunda ventanafirefox about:startpage
- se abre una nueva pestaña en Firefox con la página de inicio preconfigurada- (!)
firefox about:blank
- se abre una nueva pestaña en Firefox con mi página de inicio personal (De marcación rápida) firefox chrome://speeddial/content/speeddial.xul
(que es la dirección de la página de inicio de Marcación rápida)- no pasa nada
Lo que sucedecuando Firefox no se está ejecutandoy empiezo firefox
en una terminal?
firefox
- Firefox se abre según lo configurado enPreferences
(Show my windows and tabs from last time
)firefox about:startpage
- Firefox se abre con una nueva pestaña adicional con la página de inicio preconfigurada- (!)
firefox about:blank
- Firefox se abre con una nueva pestaña adicional en blanco. firefox chrome://speeddial/content/speeddial.xul
- Firefox no se abre:*** Preventing external load of chrome: URI into browser window.
Use -chrome <uri> instead
Entonces, cuando modifico el comando en el script ( config = ...
) y agrego una dirección, about:blank
resuelve el problema en parte. Como problema sigue siendo queno pone Firefox en primer planocuando ya está funcionando. esto solo sucedea veces.
¿Alguien podría ayudarme a editar este script para solucionar este mal comportamiento?(Fuentedel guión que modifiqué.)
Respuesta1
Parte del código shell de esofuenteno hace lo que dice hacer; principalmente el tipo que va:
if [ -n $(pgrep -f vlc) ]; then (vlc &); fi
Esto ocurre vlc &
en dos casos. Si no hay procesos que coincidan con "vlc" y si hay exactamente un proceso que coincida con "vlc". Si hay más de un proceso que coincida con "vlc", vlc &
no se ejecutará. Entonces estos bloques if son bastante inútiles. En su lugar, simplemente ejecutar vlc &
probablemente será más correcto.
Desafortunadamente, los malos consejos de shell son comunes en Internet.
Según la descripción de su problema, lo que desea que sea el resultado es que el programa se ejecute si aún no se está ejecutando, y si se está ejecutando, lleve esa ventana al frente y enfóquela. Para ello, wmctrl
se podría utilizar.
wmctrl -a 'Mozilla Firefox'
Encontrará una ventana que contiene "Mozilla Firefox" en su título y la "activará". Es decir, muévete al espacio de trabajo en el que se encuentra, tráelo al frente y dale foco. En segundo lugar, si ninguna ventana coincide, wmctrl no hará nada y saldrá con un estado de salida distinto de cero (falso), en cuyo caso podemos asumir que el programa no se está ejecutando y, en su lugar, iniciarlo.
wmctrl -a 'Mozilla Firefox' || firefox &
Aunque todavía no es perfecto. Otras ventanas además de Firefox podrían contener esa cadena en su título, por lo que deberíamos encontrar una forma más confiable de identificar la ventana correcta en este caso.
Con -x, wmctrl operará en VM_CLASS de una ventana, que normalmente tendrá un valor único por programa. Todas las ventanas de Firefox tendrán VM_CLASS "Navigator.Firefox", como se puede ver al ejecutarlo wmctrl -lx
mientras Firefox se está ejecutando.
$ wmctrl -lx
...
0x03ba3d43 3 gnome-terminal.Gnome-terminal pilot Terminal
0x04c000bc 0 Navigator.Firefox pilot Group #1 - Speed Dial - Mozilla Firefox
Con esto podemos seleccionar la ventana que tenga exactamente "Navigator.Firefox" como VM_CLASS
wmctrl -Fxa Navigator.Firefox || firefox &
Es de esperar que lo mismo pueda aplicarse a los demás programas.