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

我有两台显示器:一台是大型2560×1600显示器,我用它作为我的主显示器并完成大部分工作,另一台是1360×768显示器垂直设置用作“关闭”显示器 – 用于我的日历和电子邮件,通知弹出窗口或玩游戏时的Web浏览器等。

我目前配置它,以便统一启动器仅位于主监视器的左边缘。

我希望每个监视器都能有一个单独的统一启动器。 这样做的好处是,每个监视器上的应用程序只与该监视器上的启动器相关联,这有助于保持桌面的有序性。

不幸的是,关闭监视器的水平空间非常重要 – 我不想为此只使用额外的48像素水平空间。

对此的解决方案是将启动器位置设置(例如,通过Unity调整工具或类似工具)更改为底部。 但是,此设置会影响两个屏幕上启动器的位置,我想将启动器保持在主显示器的左边缘。

如何配置unity以在不同的监视器上使用不同的启动器位置?

另一种解决方案是让关闭监视器上的统一启动器自动隐藏,但我想在我的主监视器上保持启动栏静态。 如果有一种方法可以在每个监视器的基础上配置自动隐藏行为,这也是一个可接受的解决方案。

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

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

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

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

在我跑的测试中,它的工作非常顺畅,窗户很好地适应了变化。

剧本

#!/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 

使用

  • 此版本与第一个版本完全相同。

注意

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

两个发射器,同时在每个屏幕上的不同位置,目前是不可能的,但是,直到有人创建选项......

我看不到在不同的监视器上为单个启动器(例如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)在左侧,另一个(开罗docker)在屏幕的底部。

从我对你的需求的评估,这将满足两者,但意味着在两个屏幕上运行两个启动器,这样你可以选择适合你的使用。

如果您有多个显示器,Cairo-Dock允许您管理Dock / Launcher的位置,以便通过利用Xinerama中的function将其显示在仅一个显示器上的特定位置。

如果Dock / Launcher始终自动隐藏,我认为这不会带来显着的好处,但是它可能会为您提供一些灵活性,并且可能是我无法想到的解决方案…… 🙂

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