リンクを開くブラウザを選択してください

リンクを開くブラウザを選択してください

私は複数のウィンドウ(プロファイル)を持つFirefoxとGoogle Chromeの両方を使用します。

端末や他のGUIアプリケーションのリンクをクリックすると、デフォルトのブラウザ(Firefoxなど)を実行するのではなく、URLを読み込むブラウザ/ウィンドウを選択したいと思います。もしそういうプログラムがあるのか​​ご存知ですか?

私の(制限された)理解によれば、デフォルトのブラウザを置き換え、リンクが委任されるべき既知のブラウザおよび/またはアクティブウィンドウをポップアップとして表示する必要があると思います。

見つかったらこの回答、既存のプロセスのみを探し、見つからない場合はデフォルトプロセスを開始します。

答え1

簡単な解決策zenity

ここに画像の説明を入力してください。

  • 作る/usr/bin/ブラウザを選択
#!/bin/sh

BROWSER=$(zenity --list --radiolist --text '' --column='check' --column=browser --title='select your browser' TRUE "chromium" FALSE "firefox" FALSE "google-chrome-stable")
$BROWSER $* &

OS構成(Manjaro):

  • 作る.local/share/applications/select-browser.desktop
[Desktop Entry]
Version=1.1
Type=Application
Name=Select browser
GenericName=Navigateur Web
Comment=Accéder à Internet
Icon=google-chrome
Exec=/usr/bin/select-browser %U
Actions=new-window;new-private-window;NewShortcut;NewShortcut1;
MimeType=text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
Categories=Network;WebBrowser;
StartupNotify=true
StartupWMClass=select-browser
  • 調整.local/share/applications/defaults.list
  • 走るxdg-settings set default-web-browser select-browser.desktop

答え2

ブラウザ環境変数を使用できます。

export BROWSER=firefox
or
export BROWSER=/path/to/browser

これにより、ユーザーセッションで使用されるデフォルトのブラウザが変更されます。

開こうとしているブラウザを尋ねるスクリプトを作成し、それをデフォルトのブラウザに設定できます。これにより、リンクをクリックするたびにプロンプ​​トが表示されます。

$ 1パラメータを設定してリンクを開くには、選択したブラウザに送信します。

次のように見えます。

#!/bin/bash
website=$1
echo "What browser do you want to use?  chrome firefox "
read browsera
$browsera $website

好きなように素敵に作れます。無効な引数とすべての種類のアイテムをキャプチャしてください。入力を解析し、サイトに基づいて所定のブラウザを開くようにすることもできます。

答え3

私は数年前にこの問題を偶然発見し、既製の解決策がないことを発見しました。だから一つ作りました。 Chrome プロファイル、Firefox プロファイル、Firefox コンテナの表示など、いくつかの追加機能があります。特定のウェブサイトに対して特定のブラウザを自動的に開く場合にもルールがあります。

すべてのブラウザ/プロファイルを独自に検出します。ゼロ構成が必要です。以下からダウンロードできます。https://browsers.software/またはhttps://github.com/Browsers-software/browsers(違いはありません。ウェブサイトはgithubバージョンにリンクされています。)

答え4

私のニーズに合わせて次のスクリプトを設定しました。xdotool実行中のブラウザのリストを取得するために使用されます(現在のFirefox + Chromeでは修正済み)。結果を一覧表示し、対応するブラウザを選択できます。デスクトップに切り替えて(私はi3wmを使用しています)、ブラウザウィンドウを有効にしてURLを入力します。確かに最もきれいなコードではありませんが...動作します:)

#!/usr/bin/env python3

import sys
import tkinter
import subprocess

URL = sys.argv[1] if len(sys.argv) > 1 else None
SEARCH_STRING = 'Mozilla Firefox|Google Chrome'

def get_options():
    cmd = ['xdotool','search','--name',SEARCH_STRING]
    result = subprocess.run(cmd, stdout=subprocess.PIPE)
    window_ids = result.stdout.decode('utf-8').rstrip().split("\n")

    options = []
    for id in window_ids:
        cmd = ['xdotool','getwindowname', id]
        result = subprocess.run(cmd, stdout=subprocess.PIPE)
        title = result.stdout.decode('utf-8').rstrip()
        options.append((title, id))

    return options

def kill_window(event = None):
    root.destroy()

def select_prev_option(event):
    val = curr_var.get()
    idx = [i for i, option in enumerate(OPTIONS) if option[1] == val][0]
    if idx > 0:
        curr_var.set(OPTIONS[idx-1][1])

def select_next_option(event):
    val = curr_var.get()
    idx = [i for i, option in enumerate(OPTIONS) if option[1] == val][0]
    if idx < len(OPTIONS)-1:
        curr_var.set(OPTIONS[idx+1][1])

def execute_option(e = None):
    window_id = curr_var.get()

    cmd = ['xdotool', 'get_desktop']
    result = subprocess.run(cmd, stdout=subprocess.PIPE)
    current_desktop = int(result.stdout.decode('utf-8').rstrip())

    cmd = ['xdotool', 'get_desktop_for_window', window_id]
    result = subprocess.run(cmd, stdout=subprocess.PIPE)
    window_desktop = int(result.stdout.decode('utf-8').rstrip())

    if current_desktop != window_desktop:
        cmd = ['xdotool', 'set_desktop', str(window_desktop)]
        result = subprocess.run(cmd, stdout=subprocess.PIPE)

    cmd = [ 'xdotool', 'windowactivate', '--sync', window_id ]
    result = subprocess.run(cmd, stdout=subprocess.PIPE)

    if URL:
        cmd = [
            'xdotool', 'key','--clearmodifiers','--window', window_id, 'ctrl+t',
            'sleep', '.1',
            'type', '--clearmodifiers', URL
        ]
        result = subprocess.run(cmd, stdout=subprocess.PIPE)

        cmd = ['xdotool','key','--clearmodifiers','--window', window_id, 'Return']
        result = subprocess.run(cmd, stdout=subprocess.PIPE)

    kill_window()


root = tkinter.Tk()
root.tk.call('tk', 'scaling', 4.0)
root.attributes('-type', 'dialog')

OPTIONS = get_options()

curr_var = tkinter.StringVar()
curr_var.set(OPTIONS[0][1])

max_len = max([len(t) for t, i in OPTIONS])

for text, mode in OPTIONS:
    b = tkinter.Radiobutton(
        root,
        text=text,
        variable=curr_var,
        value=mode,
        indicatoron=0,
        font=("Arial", 12),
        width=max_len,
        anchor=tkinter.W,
        command=execute_option
    )
    b.pack(anchor=tkinter.W)


root.bind("<j>", select_next_option)
root.bind("<Down>", select_next_option)
root.bind("<k>", select_prev_option)
root.bind("<Up>", select_prev_option)
root.bind("<Return>", execute_option)

root.bind("<Control-q>", kill_window)
root.bind("<Control-w>", kill_window)
root.protocol("WM_DELETE_WINDOW", kill_window)

root.mainloop()

このスクリプトを指すデスクトップファイルを作成し、次のようにデフォルトのブラウザを設定しました。

xdg-settings set default-web-browser browserpicker.desktop
xdg-mime default browserpicker.desktop x-scheme-handler/https
xdg-mime default browser.desktop x-scheme-handler/http

関連情報