启动器放置双显示器

启动器放置双显示器

我有两台显示器。我有多个工作区。我希望我的启动器(设置 > 显示中的“启动器放置”)出现在一个工作区的两个显示器上,但在另一个工作区中只有一个启动器(在主显示器上)。这是因为我想在两个显示器上拉伸 Tweetdeck,而启动器会妨碍我。这可能吗?

工作区 1(良好):

图片 1

工作区 2(不太好):

图片 2

工作区 2(良好):

图片 3

答案1

启动器的位置是如何定义的?

启动器的位置由以下几点决定:

  1. 在 中设置的值/org/compiz/profiles/unity/plugins/unityshell/num-launchers。您可以通过以下命令读取它:

    dconf read /org/compiz/profiles/unity/plugins/unityshell/num-launchers
    

    它将输出1(一个屏幕上的启动器)或0(所有屏幕上的启动器)。

    可以通过以下命令使启动器在所有屏幕上可见:

    dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
    
  2. 如果该值为1(仅在一个屏幕上可见),我们可以设置启动器出现在哪个屏幕上,通过将目标屏幕设置为基本的屏幕,使用xrandr命令:

    xrandr --output <screen_name> --primary
    

这些正是下面的脚本使用的命令。

脚本1;手动将启动器设置为仅左侧或两个屏幕(使用快捷键)

根据运行脚本的参数,它可以设置启动器以使用以下命令显示在所有屏幕上:

dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0

或仅一个:

dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 1

在后一种情况下,它还将左屏幕设置为主屏幕。

剧本

#!/usr/bin/env python3
import subprocess
import sys

key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "

arg = sys.argv[1]

if arg == "left":
    # the launcher is set to show on all screens
    subprocess.Popen(["/bin/bash", "-c", key+"1"])
elif arg == "all":
    # the launcher is set to show only on the left screen
    subprocess.Popen(["/bin/bash", "-c", key+"0"])
    # make sure the left screen is the primary one
    scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
    left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
    subprocess.Popen(["xrandr", "--output", left, "--primary"])

如何使用

  • 将脚本复制到一个空文件中,另存为launcher_pos.py
  • 使用这两个命令测试脚本(从终端窗口):

    python3 /path/to/launcher_pos.py left
    

    python3 /path/to/launcher_pos.py all
    
  • 如果一切正常,请将命令添加到两个快捷键组合中:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并将两个命令添加到可用快捷键中。

脚本 2;自动版本

下面的脚本会自动跟踪当前工作区(无论您有多少个工作区以及配置如何)。

该脚本与工作区一起运行,你只想在左侧使用启动器,作为参数。例如:

如果使用以下命令运行脚本:

python3 /path/to/launcher_pos.py 2 3

结果是:

在此处输入图片描述

剧本

import subprocess
import sys
import time

wspace = sys.argv[1:]
key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

res = get_res()

def get_dt():
    # get the current viewport
    vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

def set_launcher(arg):
    if arg == "left":
        # the launcher is set to show on all screens
        subprocess.Popen(["/bin/bash", "-c", key+"1"])
    elif arg == "all":
        # the launcher is set to show only on the left screen
        subprocess.Popen(["/bin/bash", "-c", key+"0"])
        # make sure the left screen is the primary one
        scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
        left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
        subprocess.Popen(["xrandr", "--output", left, "--primary"])

curr_ws1 = get_dt()

while True:
    time.sleep(1)
    curr_ws2 = get_dt()
    if curr_ws2 != curr_ws1:
        if curr_ws2 in wspace:
            arg = "left"
        else:
            arg = "all"
        set_launcher(arg)
    curr_ws1 = curr_ws2

如何使用

  1. 脚本需要wmctrl

    sudo apt-get install wmctrl
    
  2. 将脚本复制到一个空文件中,另存为launcher_pos.py

  3. 通过命令测试运行:

    python3 /path/to/launcher_pos.py 1 3
    

    在工作区 1 和 3 上,启动器现在应该只出现在左侧

  4. 如果一切正常,请将其添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:

    /bin/bash -c "sleep 15 && python3 /path/to/launcher_pos.py 1 3"
    

    (如果您只希望工作区 1 和 3 在左侧使用启动器)

相关内容