如何将 Unity 启动器放在不同显示器的不同位置

如何将 Unity 启动器放在不同显示器的不同位置

我有两台显示器:一台是大型 2560x1600 显示器,我将其用作主显示器并在其上进行大部分工作,另一台是垂直设置的 1360x768 显示器,用作“关闭”显示器 - 用于查看日历和电子邮件、通知弹出窗口,或玩游戏时使用网络浏览器等。

我目前已将其配置为使统一启动器仅位于主显示器的左边缘。

我希望能够为每台显示器设置单独的 Unity 启动器。这样做的好处是,每台显示器上的应用程序只与该显示器上的启动器相关联,这有助于保持桌面井然有序。

不幸的是,关闭显示器时的水平空间非常宝贵 —— 我不想为了这个而使用额外的 48 像素的水平空间。

解决此问题的方法是将启动器位置设置(例如通过 Unity Tweak Tool 或类似工具)更改为底部。但是,此设置会影响启动器在两个屏幕上的位置,而我希望将启动器保持在主显示器的左边缘。

如何配置 Unity 以在不同的显示器上使用不同的启动器位置?

另一种解决方案是让关闭显示器上的 Unity 启动器自动隐藏,但我想让启动器栏在主显示器上保持静态。如果有办法根据每个显示器配置自动隐藏行为,这也是一种可接受的解决方案。

我宁愿坚持使用默认的 Unity 桌面环境,但如果有另一个可以很好地处理多台显示器的 DE,我可能会感兴趣。

答案1

根据活动屏幕自动移动启动器

一个可能的解决方案是根据当前鼠标位置自动改变启动器的位置:

  • 如果它在左侧屏幕上,则将启动器移到左侧
  • 如果它在右侧屏幕上,则将其移至底部

在我运行的测试中,它运行得出奇的顺畅,并且窗口能够很好地适应这种变化。

剧本

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

scr_data = subprocess.check_output(["xrandr"]).decode("utf-8")
border = int([s.split("x")[0] for s in scr_data.split() if "+0+0" in s][0])
left_scr = [l.split()[0] for l in scr_data.splitlines() if "+0+0" in l][0]

key = "com.canonical.Unity.Launcher"
item = "launcher-position"

def catch_mouse():
    return int(subprocess.check_output([
        "xdotool", "getmouselocation"
        ]).decode("utf-8").split()[0].split(":")[1])

test1 = ""

while True:
    time.sleep(1)
    test2 = catch_mouse() <= border
    if test2 != test1:
        if test2 == True:
            cmd = ["gsettings", "set", key, item, "Left"]
        else:
            cmd = ["gsettings", "set", key, item, "Bottom"]
        subprocess.Popen(cmd)
    test1 = test2

如何使用

  1. 该脚本需要xdotool

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

  3. 测试-通过命令运行它(从终端)

    python3 /path/to/move_launcher.py
    
  4. 如果一切正常,请添加到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:

    /binh/bash -c "sleep 15 && python3 && /path/to/move_launcher.py
    

编辑

...或者更高级,仅在活动屏幕上的任意位置处有一个启动器。

...一个仅设置一个启动器的脚本(在左侧屏幕,左侧):

![在此处输入图片描述

...当您在左侧屏幕上工作时。这将在右侧屏幕上为您提供全尺寸视图...

...第二个屏幕底部有一个启动器:

在此处输入图片描述

...如果你移动到正确的屏幕,它会在你想要的位置为你提供你需要的启动器在右侧屏幕上

如上所述,在测试中,窗口顺利适应,没有出现错误。

剧本

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

scr_data = subprocess.check_output(["xrandr"]).decode("utf-8")
border = int([s.split("x")[0] for s in scr_data.split() if "+0+0" in s][0])
left_scr = [l.split()[0] for l in scr_data.splitlines() if "+0+0" in l][0]
right_scr = [l.split()[0] for l in scr_data.splitlines() if all([
    not "+0+0" in l, l.count("+") == 2])][0]

key = "com.canonical.Unity.Launcher"
item = "launcher-position"

subprocess.call(["dconf", "write",
        "/org/compiz/profiles/unity/plugins/unityshell/num-launchers", "1"])

def catch_mouse():
    return int(subprocess.check_output([
        "xdotool", "getmouselocation"
        ]).decode("utf-8").split()[0].split(":")[1])

test1 = ""

while True:
    time.sleep(1)
    test2 = catch_mouse() <= border
    if test2 != test1:
        if test2 == True:
            cmd1 = ["xrandr", "--output", left_scr, "--primary"]
            cmd2 = ["gsettings", "set", key, item, "Left"]
        else:
            cmd1 = ["xrandr", "--output", right_scr, "--primary"]
            cmd2 = ["gsettings", "set", key, item, "Bottom"]
        subprocess.Popen(cmd1)
        subprocess.call(cmd2)
    test1 = test2

使用

  • 此版本的运行方式与第一个版本完全相同。

笔记

这只是两个例子。很多事情都是有可能的。

发射器,同时在不同的位置每屏幕,目前是不可能的,直到有人创造出这个选择……

答案2

我看不到在不同的显示器上为单个启动器(例如 Unity)选择不同位置的机制。

考虑到实际空间的问题(水平空间有限),我认为将启动器放在屏幕底部并自动隐藏它是一个解决方案。

在 Ubuntu 16.04 LTS 中,您可以将启动器移至底部,但我意识到这会导致主显示器左侧没有启动器(您的另一个问题)。

那么 - 如果在两个屏幕上都有两个(隐藏的)启动器会怎么样?一个在左侧,一个在屏幕底部?

请参阅本文以了解使用备用启动器(Cairo Dock)的机制: http://www.howtogeek.com/202708/how-to-convert-the-unity-launcher-into-a-dock-style-launcher/

我已经测试过这个(14.04 LTS),并且可以确认安装 Unity Tweak Tool 和 Cairo Dock 会在两个屏幕上为您提供两个(如果您愿意,可以隐藏)启动器 - 一个(Unity Launcher)在左侧,另一个(Cairo Dock)在屏幕底部。

根据我对您需求的评估,这可以满足两者,但意味着在两个屏幕上运行两个启动器,以便您可以根据自己的需要选择使用哪个启动器。

如果您有多个显示器,Cairo-Dock 允许您利用 Xinerama 中的功能来管理 Dock/Launcher 的位置,以便它仅出现在一个显示器上的特定位置。

如果 Dock/Launcher 始终自动隐藏,我认为这不会带来显著的好处,但它可能会为您提供一些灵活性,甚至可能提供我想不到的解决方案……:)

请参阅此处了解选项:https://glx-dock.org/bg_topic.php?t=5632

相关内容