Detectar automaticamente o navegador já aberto em vez de abrir o padrão

1

Tenho vários navegadores no meu sistema (Firefox, Google Chrome e Chromium).
Eu normalmente uso um deles de cada vez com base nas minhas necessidades, mas quando outros aplicativos desejam abrir um navegador, eles sempre abrem o navegador padrão / do sistema.

Existe um aplicativo ou script que é capaz de detectar se um navegador já está em execução e usá-lo como navegador padrão atual?

EDITAR

Eu não quero que um navegador detecte sua própria instância! Eu quero um programa / script solicitante de navegador para detectar qualquer navegador já aberto.

  • Por exemplo, suponha que eu tenha o Firefox, o Google Chrome e o Chromium, e clico em um link em um arquivo PDF, e o Chromium já está aberto. Eu quero que o link seja aberto no Chromium.
  • Em outro momento, o Firefox está aberto. Então eu quero que o link seja aberto no Firefox.

Na verdade, quero que o navegador já aberto tenha mais prioridade que o padrão do sistema.

    
por RYN 31.12.2016 / 14:15

1 resposta

1

O seguinte programa em Python usa o módulo psutil para obter uma lista de processos que pertencem a você, verifica se um conhecido o navegador está sendo executado e, se estiver, inicie esse novamente. Se nenhum navegador puder ser encontrado, um padrão será iniciado. Eu adicionei alguns comentários para esclarecer o que está acontecendo no script.

Além do próprio script, você ainda precisa tornar esse executável com chmod e garantir que o script é executado em vez de lançar um navegador específico.

#!/usr/bin/env python

import psutil
import os
import subprocess
import sys
import pwd

def getlogin():
    return pwd.getpwuid(os.geteuid()).pw_name

def start_browser(exe_path):
    # Popen should start the process in the background
    # We'll also append any command line arguments
    subprocess.Popen(exe_path + sys.argv[1:]) 

def main():
    # Get our own username, to see which processes are relevant
    me = getlogin()

    # Process names from the process list are linked to the executable
    # name needed to start the browser (it's possible that it's not the
    # same). The commands are specified as a list so that we can append
    # command line arguments in the Popen call.
    known_browsers = { 
        "chrome": [ "google-chrome-stable" ],
        "chromium": [ "chromium" ],
        "firefox": [ "firefox" ]
    }

    # If no current browser process is detected, the following command
    # will be executed (again specified as a list)
    default_exe = [ "firefox" ]
    started = False

    # Iterate over all processes
    for p in psutil.process_iter():
        try:
            info = p.as_dict(attrs = [ "username", "exe" ])
        except psutil.NoSuchProcess:
            pass
        else:
            # If we're the one running the process we can
            # get the name of the executable and compare it to
            # the 'known_browsers' dictionary
            if info["username"] == me and info["exe"]:
                print(info)
                exe_name = os.path.basename(info["exe"])
                if exe_name in known_browsers:
                    start_browser(known_browsers[exe_name])
                    started = True
                    break

    # If we didn't start any browser yet, start a default one
    if not started:
        start_browser(default_exe)

if __name__ == "__main__":
    main()
    
por 01.01.2017 / 20:12