Como definir a variável padrão para um único comando com variáveis ​​env?

Como definir a variável padrão para um único comando com variáveis ​​env?

Preciso substituir o navegador padrão para um único processo. Este processo começa manualmente a partir de scripts npm. Para conseguir isso programaticamente, decidi substituir BROWSERa variável de ambiente logo antes do script. Mas não funciona. Ele rouba o navegador padrão de todo o sistema. Eu tentei com xdg-open, mas também não está funcionando.

Para ser breve, quero que o seguinte comando abra o URL fornecido no navegador fornecido, não no navegador padrão.

BROWSER='path to desired browser' xdg-open 'any url'

PS: Só para contar um pouco mais sobre o meu problema. Estou usando o Firefox como navegador padrão em todas as minhas máquinas e me acostumei bastante. Mas recentemente, ao depurar um aplicativo da web, percebi que alguns pontos de interrupção não eram usados ​​pelas ferramentas de desenvolvimento do Firefox. Instalei o Chromium e seu depurador funcionou conforme o esperado. Eu uso o storybook para desenvolvimento e gostaria de abri-lo no Chromium, enquanto uso o Firefox como variável padrão para o uso diário regular.

Responder1

Eu precisava de algo semelhante, mas não limitado a situações que respeitassem $BROWSER, pois xdg-openfrequentemente usaria o perfil de navegador errado.

Aqui está uma solução alternativa com os seguintes componentes:

  • Um script que carrega a BROWSERvariável e inicia o navegador correto.
  • Uma substituição do perfil padrão atual, .desktopcopiando-o para o ~/.local/share/applicationsdiretório.
  • Altere as Execinstruções no .desktoparquivo para usar o script customizado.
  • Defina a BROWSERvariável para um padrão sensato no shell de login para ter um substituto.

Passo a passo

Eu adicionei um script ao meu ~/bindiretório chamado custom-browserque se parece com:

$BROWSER "$@"

Em segundo lugar, encontre o .desktopperfil atual com:

xdg-settings get default-web-browser

Isso me deu firefox.desktop, que copiei para o diretório inicial do meu usuário:

cp /usr/share/applications/firefox.desktop ~/.local/share/applications/firefox.desktop

Modifiquei as Execinstruções ~/.local/share/applications/firefox.desktoppara launch /home/{user}/bin/custom-browser.

Agora posso usar:

BROWSER='chromium' xdg-open 'https://startpage.com'
BROWSER='firefox' xdg-open 'https://startpage.com'

Para abrir diferentes navegadores com base na BROWSERvariável. Espero que isso ajude você de alguma forma.

Meu uso

eu usodirenv[1] para definir a BROWSERvariável com base no diretório, por exemplo, diretórios de trabalho usam um perfil de trabalho para meu navegador.

Outra é que eu inicio aplicativos para BROWSER=hardened-firefox signal-desktopforçar o aplicativo a abrir links com um navegador específico.

Notas

  • O script é necessário porque o .desktoparquivo não carrega variáveis ​​de ambiente, então adicionar Exec=$BROWSER %udiretamente não funciona.
  • É possível definir o substituto BROWSERno script em vez do shell de login.
  • É possível escrever um .desktoparquivo personalizado e alterar o padrão com xdg-settings/ xdg-mimeem vez de substituir o padrão; Achei mais fácil acertar "com a substituição".
  • Se estiver usando navegadores que não usam a URL como primeiro parâmetro posicional, um customizado .desktope lidar com isso no script pode ser mais fácil.
  • Se o .desktopperfil não estiver em /usr/share/applications, ou a substituição $HOME/.local/share/applicationsnão funcionar, tente ocaminhos alternativos[2] ou consulte a documentação da sua distribuição.

Ligações

  1. https://direnv.net/
  2. https://specifications.freedesktop.org/mime-apps-spec/latest/ar01s02.html

Responder2

export BROWSER='path to desired browser' && xdg-open 'any url'deveria resolver o problema.

informação relacionada