링크를 열 브라우저를 선택하세요

링크를 열 브라우저를 선택하세요

저는 여러 창(프로필)이 있는 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

관련 정보