
Ich muss den Standardbrowser für einen einzelnen Prozess überschreiben. Dieser Prozess wird manuell von npm-Skripten aus gestartet. Um dies programmgesteuert zu erreichen, habe ich beschlossen, die BROWSER
Umgebungsvariable direkt vor dem Skript zu überschreiben. Aber es funktioniert nicht. Es öffnet einfach den systemweiten Standardbrowser. Ich habe es mit versucht xdg-open
, aber es funktioniert auch nicht.
Kurz gesagt, ich möchte, dass der folgende Befehl die angegebene URL im bereitgestellten Browser öffnet, nicht im Standardbrowser.
BROWSER='path to desired browser' xdg-open 'any url'
PS: Ich möchte nur ein bisschen mehr über mein Problem erzählen. Ich verwende Firefox als Standardbrowser auf allen meinen Rechnern und habe mich ziemlich daran gewöhnt. Aber als ich kürzlich eine Webanwendung debuggte, bemerkte ich, dass einige Haltepunkte von den Firefox-Entwicklertools nicht verwendet wurden. Ich habe Chromium installiert und sein Debugger funktionierte wie erwartet. Ich verwende Storybook für die Entwicklung und möchte es in Chromium öffnen, während ich Firefox als Standardvariable für den normalen Alltagsgebrauch verwende.
Antwort1
Ich brauchte etwas Ähnliches, aber nicht beschränkt auf Situationen, in denen dies respektiert wurde $BROWSER
, da xdg-open
häufig das falsche Browserprofil verwendet wurde.
Hier ist ein Workaround mit den folgenden Komponenten:
- Ein Skript, das die
BROWSER
Variable lädt und den richtigen Browser startet. - Eine Überschreibung des aktuellen Standardprofils
.desktop
durch Kopieren in das~/.local/share/applications
Verzeichnis. - Ändern Sie die
Exec
Anweisungen in der.desktop
Datei, um das benutzerdefinierte Skript zu verwenden. - Setzen Sie die
BROWSER
Variable in der Anmelde-Shell auf einen sinnvollen Standardwert, um eine Fallback-Möglichkeit zu haben.
Schritt für Schritt
Ich habe meinem ~/bin
Verzeichnis ein Skript mit dem Namen hinzugefügt custom-browser
, das wie folgt aussieht:
$BROWSER "$@"
Zweitens finden Sie das aktuelle .desktop
Profil mit:
xdg-settings get default-web-browser
Das Ergebnis war firefox.desktop
, das ich in mein Benutzer-Home-Verzeichnis kopiert habe:
cp /usr/share/applications/firefox.desktop ~/.local/share/applications/firefox.desktop
Ich habe die Exec
Anweisungen in ~/.local/share/applications/firefox.desktop
„launch“ geändert /home/{user}/bin/custom-browser
.
Jetzt kann ich Folgendes verwenden:
BROWSER='chromium' xdg-open 'https://startpage.com'
BROWSER='firefox' xdg-open 'https://startpage.com'
Um je nach BROWSER
Variable unterschiedliche Browser zu öffnen. Ich hoffe, das hilft Ihnen irgendwie.
Meine Nutzung
ich benutzedirenv
[1] Um die Variable basierend auf dem Verzeichnis festzulegen BROWSER
, verwenden Arbeitsverzeichnisse beispielsweise ein Arbeitsprofil für meinen Browser.
Eine andere Möglichkeit besteht darin, Apps mit zu starten, BROWSER=hardened-firefox signal-desktop
um die App zu zwingen, Links mit einem bestimmten Browser zu öffnen.
Anmerkungen
- Das Skript ist erforderlich, da die
.desktop
Datei keine Umgebungsvariablen lädt und dasExec=$BROWSER %u
direkte Hinzufügen daher nicht funktioniert. BROWSER
Es ist möglich, den Fallback im Skript anstelle der Login-Shell festzulegen .- Es ist möglich, eine benutzerdefinierte
.desktop
Datei zu schreiben und die Vorgabe mitxdg-settings
/ zu ändernxdg-mime
, anstatt die Vorgabe zu überschreiben. Ich fand es einfacher, es mit der Überschreibung „richtig“ zu machen. - Wenn Sie Browser verwenden, die die URL nicht als ersten Positionsparameter verwenden, ist eine benutzerdefinierte Vorgehensweise
.desktop
und die Verarbeitung im Skript möglicherweise einfacher. - Wenn das
.desktop
Profil nicht in ist/usr/share/applications
oder die Überschreibung in$HOME/.local/share/applications
nicht funktioniert, versuchen Sie dasalternative Wege[2] oder konsultieren Sie die Dokumentation Ihrer Distribution.
Links
Antwort2
export BROWSER='path to desired browser' && xdg-open 'any url'
sollte funktionieren.