如何以特定用户身份启动 Chromium

如何以特定用户身份启动 Chromium

Chromium 浏览器允许多个用户在 Chromium 内拥有各自的书签、扩展等。

是否可以使用指定要加载哪个用户的参数来启动 Chromium。

默认情况下加载最后一个用户。

答案1

Chromium 用户配置文件

用户chromium-browser配置文件存储在 的特定子文件夹中~/.config/chromium。这些子文件夹有名称,但显然与用户的名称不对应。
假设我有三个用户配置文件:“Josephine”、“Karel”、“Willem”:

<图片1>

它们由 中的三个配置文件文件夹“表示” ~/.config/chromiumDefault和。 要查看哪个文件夹对应于哪个用户配置文件,您必须查看文件夹内部,并Profile 1查看Profile 2
用户名(“Karel”、“Willem”或“Josephine”)出现在文件中Preferences

使用特定用户配置文件打开 Chromium

chromium使用特定用户配置文件打开的命令是:

chromium-browser --profile-directory="<name_of_subfolder>"

其中<name_of_subfolder>是代表用户的文件夹的名称,如Chromium 用户配置文件例如,要打开chromium with“Karel”的个人资料,我必须运行以下命令:

Exec=chromium-browser --profile-directory="Default"

选项

有多种方法可以创建使用特定用户配置文件打开的选项。

  1. 编辑chromium-browser.desktop文件以默认以特定用户打开:

    • chromium-browser.desktop文件从/usr/share/applications复制到~/.local/share/applications

      cp /usr/share/applications/chromium-browser.desktop ~/.local/share/applications/chromium-browser.desktop
      
    • 打开本地副本~/.local/share/applications(将其拖到打开的gedit窗口或运行命令gedit ~/.local/share/applications/chromium-browser.desktop),查找第一的行,以 开头Exec=。将该行替换为(对于“Karel”):

      Exec=chromium-browser --profile-directory="Default" %u
      

    保存文件并注销/登录以查看更改

  2. 或者,您可以将用户添加为启动器的快捷方式:

    <图片2>

    寻找以下行:

    Actions=NewWindow;Incognito;TempProfile;
    

    改成:

    Actions=NewWindow;Incognito;TempProfile;Karel;
    

    在文件的最末尾添加一个部分:

    [Desktop Action Karel]
    Name=Karel
    Exec=chromium-browser --profile-directory="Default"
    OnlyShowIn=Unity;
    

    对您想要添加为快捷方式的每个用户重复此过程(之后不要忘记注销/登录)。

  3. 脚本选项:

    .desktop上述两个选项的缺点是它们是“固定的”。每次添加或删除用户时,您都必须编辑文件。
    因此,另一个想法是编写一个脚本来查找您的配置文件,在首选项文件中提取相应的用户名,并显示Zenity一个选项列表以供选择:

    < 图片 3>

    如果您通过快捷键调用窗口,您只需从列表中选择用户(或直接输入号码)并按Return

    如何使用

    将以下脚本复制到一个空文件中,并将其保存为 chromium_profiles.py

    通过快捷键组合运行:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:

    python3 /path/to/chromium_profiles.py
    

    剧本

    #!/usr/bin/env python3
    import subprocess
    import os
    
    home = os.environ["HOME"]
    directory = home+"/"+".config/chromium"
    profiles = []
    
    user = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
    reduce = lambda s: s[0].split(": ")[1].replace(",\n", "").replace('"', "")
    
    def read(file):
        with open(file) as src:
            lines = src.readlines(); r_ls = range(len(lines))
            da = [i for i in r_ls if '"local_profile_id":' in lines[i]][0]
            return reduce([lines[i] for i in r_ls if i > da and '"name"' in lines[i]])
    
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.startswith("Preferences"):
                file = root+"/"+file; pr_name = read(file); pr_id = root.split("/")[-1]
                profiles.append([pr_name, pr_id])
    
    strings = [item[0] for item in profiles]
    list_items = [str(i+1)+". "+strings[i] for i in range(len(strings))]
    
    try:
        choose = 'zenity --list '+'"'+('" "').join(list_items)+\
                 '"'+' --column="User profiles" '+\
                 '--title="Chromium users" --height 250 --width 150'
        choice = profiles[int(user(choose)[0])-1]
        command = 'chromium-browser --profile-directory="'+choice[1]+'"'
        subprocess.Popen(["/bin/bash", "-c", command])
    except subprocess.CalledProcessError:
        pass
    

相关内容