AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 487203
Accepted
Melle
Melle
Asked: 2018-12-11 12:28:52 +0800 CST2018-12-11 12:28:52 +0800 CST 2018-12-11 12:28:52 +0800 CST

选择在哪个浏览器中打开链接

  • 772

我在多个窗口(配置文件)中同时使用 Firefox 和 Google Chrome。

在例如终端或其他 GUI 应用程序中单击链接时,我想选择在哪个浏览器/窗口中加载 URL,而不是运行默认浏览器(例如 Firefox)。有谁知道这样的程序是否存在?

根据我的(有限)理解,我认为它应该替换默认浏览器并显示一个带有已知浏览器和/或链接应该委托给的活动窗口的弹出窗口。

如果找到这个答案,但它只是在寻找现有的进程,如果没有找到则启动一个默认的进程。

gui browser
  • 4 4 个回答
  • 4375 Views

4 个回答

  • Voted
  1. Michael Prokopec
    2018-12-11T12:46:41+08:002018-12-11T12:46:41+08:00

    您可以使用浏览器环境变量:

    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
    

    你可以随心所欲地制作它。让它捕捉无效的论点和各种各样的东西。您甚至可以让它解析输入,并根据打开的站点打开预定的浏览器。

    • 7
  2. anthony.perron
    2020-04-20T04:50:44+08:002020-04-20T04:50:44+08:00

    一个简单的解决方案zenity

    在此处输入图像描述

    • 创建/usr/bin/select-browser
    #!/bin/sh
    
    BROWSER=$(zenity --list --radiolist --text '' --column='check' --column=browser --title='select your browser' TRUE "chromium" FALSE "firefox" FALSE "google-chrome-stable")
    $BROWSER $* &
    

    配置操作系统(对我来说是 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
    • 7
  3. GAD3R
    2018-12-11T13:50:35+08:002018-12-11T13:50:35+08:00

    您可以使用xdg-mime设置默认应用程序打开 URL,而无需更改默认浏览器(xdg-settings用于设置默认浏览器):

    获取默认应用程序(在您的情况下为 firefox):

    xdg-mime query default x-scheme-handler/http
    xdg-mime query default x-scheme-handler/https
    

    要将 google-chrome 设置为默认应用程序,请使用以下命令:

    xdg-mime default google-chrome.desktop x-scheme-handler/http
    xdg-mime default google-chrome.desktop x-scheme-handler/https
    
    • 1
  4. Best Answer
    Melle
    2019-04-27T02:17:57+08:002019-04-27T02:17:57+08:00

    为了满足我自己的需要,我一起破解了以下脚本。它用于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
    
    • 0

相关问题

  • GTK3 文件夹名称对话框是白色的

  • i3 - 我的桌面的一些可恶的字体大小

  • 新安装的 CentOS 7 启动到命令行,无法进入 GUI

  • 浏览器不再播放 Flash (.swf) 文件

  • Debian 9 LXQt:尽可能少的桌面安装所需的软件包?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve