如何通过向左移动光标从屏幕 1 移动到屏幕 3 以及反之?

如何通过向左移动光标从屏幕 1 移动到屏幕 3 以及反之?

如果我必须将鼠标从左屏幕一直移动到右屏幕,距离会相当大。

有没有办法将屏幕的两侧虚拟连接起来,就像它们排成一个圆圈一样?然后我可以通过简单地将光标向左移动,从左屏幕移动到右屏幕。

答案1

连接屏幕的脚本“循环”

下面的脚本将按照您的描述执行;如果鼠标触摸右侧(最右侧)屏幕的右边缘,则鼠标会重新出现在左侧(最左侧)屏幕上。如果它触摸左侧屏幕的左侧,则它会重新出现在右侧屏幕的右侧。

内置预防措施

该脚本假定屏幕在 x 方向上以非重叠配置排列,但它具有内置校正功能,以防屏幕未顶部对齐或 y 分辨率不同。虽然在大多数情况下您不会遇到问题,但在下面的情况下您会遇到问题,除非脚本考虑到屏幕在 y 分辨率和/或(不)对齐方面的可能差异:


在此处输入图片描述

如果左屏幕的顶部低于右屏幕的顶部,则光标从右上角移动到左屏幕的顶部。可能未对齐底部同上


剧本

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

def get_screendata():
    data = [s.split("+") for s in subprocess.check_output(["xrandr"]).decode("utf-8").split() \
            if s.count("+") == 2]
    # calculate total x-size of spanning screens
    x_span = sum([int(item[0].split("x")[0]) for item in data])
    # sort screens to find first/last screen (also for 2+ screens)
    data.sort(key=lambda x: x[1])
    # find (possible) screen offset of first/last screen and vertical area
    scr_first = data[0]; shiftl = int(scr_first[2])
    areal = [shiftl, shiftl+int(scr_first[0].split("x")[1])] 
    scr_last = data[-1]; shiftr = int(scr_last[2])
    arear = [shiftr, shiftr+int(scr_last[0].split("x")[1])]   
    return (x_span, areal, arear)

screendata = get_screendata()
x_span = screendata[0]; areal = screendata[1]; arear = screendata[2]
new_coords = []

while True:
    time.sleep(0.5)
    new_coords = []
    # read the current mouse position
    pos = [int(s.split(":")[-1]) for s in \
           subprocess.check_output(["xdotool", "getmouselocation"]).decode("utf-8").split()\
           if any(["x" in s, "y" in s])]
    # if the mouse is on the left of the first screen
    if pos[0] == 0:
        new_coords.append(x_span-2)
        if pos[1] <=  arear[0]:
            new_coords.append(arear[0]+2)
        elif pos[1] >= arear[1]:
            new_coords.append(arear[1]-2)
        else:
            new_coords.append(pos[1])
    # if the mouse is on the right of the last screen
    elif pos[0] > x_span-2:
        new_coords.append(2)
        if pos[1] <=  areal[0]:
            new_coords.append(areal[0]+2)
        elif pos[1] >= areal[1]:
            new_coords.append(areal[1]-2)
        else:
            new_coords.append(pos[1])
    # move the mouse
    if new_coords:
        subprocess.Popen(["xdotool", "mousemove", str(new_coords[0]), str(new_coords[1])])

如何使用

  1. 脚本需要xdotool

    sudo apt-get install xdotool
    
  2. 将脚本复制到一个空文件中,另存为circular_mouse.py
  3. 通过在终端中运行来测试运行脚本:

    python3 /path/to/circular_mouse.py
    

    您应该能够无限地向右或向左移动鼠标,在屏幕上循环移动。

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

    /bin/bash -c "sleep 15 &&  python3 /path/to/circular_mouse.py" 
    

答案2

您可以尝试使用塔拉利。您需要编辑map_beef.c您自己的显示器设置。

另外,@ohayden 发布了一个 bash 脚本这里可以自定义执行您想要的操作。要使用它,您需要xdotool通过运行来安装

sudo apt-get install xdotool

恐怕我只有一台显示器,所以我无法尝试这两种可能的解决方案。

相关内容