Unity 键盘快捷键将鼠标(和焦点)从一个屏幕移动到另一个屏幕

Unity 键盘快捷键将鼠标(和焦点)从一个屏幕移动到另一个屏幕

喜欢在家和工作时使用多显示器设置,但想知道如何在不使用鼠标的情况下在各个显示器(即“屏幕”)之间移动焦点?

键盘快捷键非常适合切换虚拟桌面,我查看了各种选项,ccsm但没有任何想法。

我还会关注其他问题,例如在单独的 X 屏幕之间切换焦点或链接至双屏鼠标工具切换屏幕但所有这些似乎都与每个单独的屏幕有关xorg.conf。如今,Unity“只适用于”多个显示器(通过显示端口),因此这有点令人尴尬。

但是,任何有关如何在单个(虚拟) Unity 显示器内导航多个(物理)屏幕的提示都会受到欢迎。

答案1

在屏幕之间切换并(可选)将焦点设置在(全屏)窗口上

下面的脚本将在左屏幕和右屏幕之间切换(和“焦点”)如果两个屏幕均或多或少居中或顶部对齐,以及或多或少垂直分辨率相同。
我认为在几乎所有左右屏幕设置的情况下它都可以工作。

剧本

#!/usr/bin/env python3
import subprocess
# just a helper function
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
# get the current mouse position
current = [int(n) for n in [it.split(":")[1] for it in get(["xdotool", "getmouselocation"]).split()[:2]]]
# get the x/y size of the left screen
screendata = [(s.split("x")[0], s.split("x")[1].split("+")[0]) for s in get(["xrandr"]).split() if "+0+0" in s ][0]
xy = [int(n) for n in screendata]
# see if the mouse is on the left- or right screen
if current[0] < xy[0]:
    # if the mouse currently is on the left screen, move it to the right (from the middle of the left screen)
    command = ["xdotool", "mousemove", "--sync", str(current[0]+xy[0]), str(xy[1]/2)]
else:
    # if the mouse currently is on the left screen, move it to the right (from the middle of the left screen)
    command = ["xdotool", "mousemove", "--sync", str(current[0]-xy[0]), str(xy[1]/2)]

subprocess.Popen(command)
# optional: click after the mouse move: comment out if not needed / wanted
subprocess.Popen(["xdotool", "click", "1"])

如何使用

  1. 该脚本需要xdotool安装(!)

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

  3. 通过命令测试运行:

    python3 /path/to/toggle_screenloc.py
    
  4. 如果一切正常,请将其添加到快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:

    python3 /path/to/toggle_screenloc.py
    

它到底是做什么的

如果运行该脚本,它:

  1. 从命令的输出中得出(左)屏幕的尺寸(x/y)xrandr
  2. xdotool它通过检查 ( ) 命令来判断鼠标是在左屏幕还是右屏幕上:

    xdotool getmouselocation
    

如果鼠标指针位于屏幕左侧:

  • 它被移动到左屏幕的中间(垂直),并水平移动到等于当前位置+左屏幕宽度的位置。

如果鼠标指针在右侧屏幕上:

  • 动作则相反。

随后,鼠标单击一次,将焦点设置在(可能的)全屏应用程序上(可选)。

答案2

Jacob Vlijm 的回答有正确的想法,但还有其他方法。以下是我的看法:

#!/bin/bash

eval $(xdotool getmouselocation --shell)

if [ $Y -gt 1080 ]
then
    theta=0
else
    theta=180
fi

xdotool mousemove_relative --polar $theta 1080

eval $(xdotool getmouselocation --shell)

xdotool windowfocus $WINDOW

简化来自使用xdotool getmouselocation --shell,它方便地将变量转储到正在运行的脚本中。这也让我们无需点击即可聚焦窗口,这可能会产生我们不希望的副作用。

请注意,在我的例子中,我的显示器是垂直堆叠的,因此我将鼠标向上(theta = 0)或向下(theta = 180)移动。我还选择 1080px 作为分界线。

答案3

这个存储库可能会帮助你

https://github.com/Eitol/screen_focus_changer

您将 focus_changer.py 左侧脚本放在固定位置(例如 / opt)然后在设置中添加键绑定 / 快捷键 / 热键

python3 /opt/focus_changer.py left # 焦点移到左边

python3 /opt/focus_changer.py right # 焦点移到右侧

相关内容