AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 713628
Accepted
A.B.
A.B.
Asked: 2015-12-27 05:47:16 +0800 CST2015-12-27 05:47:16 +0800 CST 2015-12-27 05:47:16 +0800 CST

使用两个独立指针在双屏设置中将鼠标绑定到混凝土监视器

  • 772

场景是,将我的 Wacom Bamboo 绑定到第二台显示器,将鼠标绑定到第一台显示器。Wacom Bamboo 的装订与数位板的设置完美搭配。但是如何将鼠标绑定到另一台显示器?


我目前的步骤:

  1. 将 Wacom Bamboo 绑定到我的第二台显示器

    在此处输入图像描述

  2. 配置两个独立的指针

    1. 使用插入的 Wacom Bamboo 和我的鼠标,xinput --list显示

       ~  xinput list
      ⎡ Virtual core pointer                      id=2    [master pointer  (3)]
      ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
      ⎜   ↳ Logitech G9x Laser Mouse                  id=8    [slave  pointer  (2)]
      ⎜   ↳ Logitech G9x Laser Mouse                  id=9    [slave  pointer  (2)]
      ⎜   ↳ Razer Razer BlackWidow Ultimate           id=13   [slave  pointer  (2)]
      ⎜   ↳ Razer Razer BlackWidow Ultimate           id=14   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pen stylus                   id=10   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pen eraser                   id=11   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pen cursor                   id=15   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pad pad                      id=16   [slave  pointer  (2)]
      ⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
          ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
          ↳ Power Button                              id=6    [slave  keyboard (3)]
          ↳ Power Button                              id=7    [slave  keyboard (3)]
          ↳ Razer Razer BlackWidow Ultimate           id=12   [slave  keyboard (3)]
      
    2. 创建一个新设备

      xinput create-master Bamboo
      
       ~  xinput list                
      ⎡ Virtual core pointer                      id=2    [master pointer  (3)]
      ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
      ⎜   ↳ Logitech G9x Laser Mouse                  id=8    [slave  pointer  (2)]
      ⎜   ↳ Logitech G9x Laser Mouse                  id=9    [slave  pointer  (2)]
      ⎜   ↳ Razer Razer BlackWidow Ultimate           id=13   [slave  pointer  (2)]
      ⎜   ↳ Razer Razer BlackWidow Ultimate           id=14   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pen stylus                   id=10   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pen eraser                   id=11   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pen cursor                   id=15   [slave  pointer  (2)]
      ⎜   ↳ Wacom Bamboo Pad pad                      id=16   [slave  pointer  (2)]
      ⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
          ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
          ↳ Power Button                              id=6    [slave  keyboard (3)]
          ↳ Power Button                              id=7    [slave  keyboard (3)]
          ↳ Razer Razer BlackWidow Ultimate           id=12   [slave  keyboard (3)]
      ⎡ Bamboo pointer                            id=17   [master pointer  (18)]
      ⎜   ↳ Bamboo XTEST pointer                      id=19   [slave  pointer  (17)]
      ⎣ Bamboo keyboard                           id=18   [master keyboard (17)]
          ↳ Bamboo XTEST keyboard                     id=20   [slave  keyboard (18)]
      
    3. 重新附加 Wacom Bamboo id

      xinput reattach 10 "Bamboo pointer"
      xinput reattach 11 "Bamboo pointer"
      xinput reattach 15 "Bamboo pointer"
      xinput reattach 16 "Bamboo pointer"
      
       ~  xinput list
      ⎡ Virtual core pointer                      id=2    [master pointer  (3)]
      ⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
      ⎜   ↳ Logitech G9x Laser Mouse                  id=8    [slave  pointer  (2)]
      ⎜   ↳ Logitech G9x Laser Mouse                  id=9    [slave  pointer  (2)]
      ⎜   ↳ Razer Razer BlackWidow Ultimate           id=13   [slave  pointer  (2)]
      ⎜   ↳ Razer Razer BlackWidow Ultimate           id=14   [slave  pointer  (2)]
      ⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
          ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
          ↳ Power Button                              id=6    [slave  keyboard (3)]
          ↳ Power Button                              id=7    [slave  keyboard (3)]
          ↳ Razer Razer BlackWidow Ultimate           id=12   [slave  keyboard (3)]
      ⎡ Bamboo pointer                            id=17   [master pointer  (18)]
      ⎜   ↳ Wacom Bamboo Pen stylus                   id=10   [slave  pointer  (17)]
      ⎜   ↳ Wacom Bamboo Pen eraser                   id=11   [slave  pointer  (17)]
      ⎜   ↳ Wacom Bamboo Pen cursor                   id=15   [slave  pointer  (17)]
      ⎜   ↳ Wacom Bamboo Pad pad                      id=16   [slave  pointer  (17)]
      ⎜   ↳ Bamboo XTEST pointer                      id=19   [slave  pointer  (17)]
      ⎣ Bamboo keyboard                           id=18   [master keyboard (17)]
          ↳ Bamboo XTEST keyboard                     id=20   [slave  keyboard (18)]
      
mouse
  • 1 1 个回答
  • 2138 Views

1 个回答

  • Voted
  1. Best Answer
    Jacob Vlijm
    2015-12-31T05:56:34+08:002015-12-31T05:56:34+08:00

    关于答案

    下面的答案可能需要一些额外的编辑。要创建两个单独的鼠标,我按照您的问题中提到的步骤进行操作。它确实有效,但我的“普通”鼠标之后出现了一些问题。在某些情况下,左键单击不起作用。

    由于您没有在问题中提及副作用,我认为这与我连接的两只鼠标的硬件特定冲突功能有关。

    好消息是,xdotool显然只“看到”了“主”鼠标的坐标,这使得将光标锁定在其中一个屏幕上成为可能。

    两个脚本

    下面两个脚本:

    1. 将指针锁定在两个屏幕之一的脚本。
    2. 如您的问题所述,用于自动化步骤 2 的脚本:配置两个独立的指针



    1.在双显示器设置中将光标锁定在一个屏幕上的脚本

    #!/usr/bin/env python3
    import subprocess
    import time
    import sys
    
    # --- set the loop time below
    t = 0.2
    # ---
    
    # screen argument should be either left or right
    screen = sys.argv[1]
    
    def get(command):
        return subprocess.check_output(command).decode("utf-8")
    
    def condition(x_pos):
        if screen == "right":
            return x_pos < limit
        else:
            return x_pos > limit
    
    def get_pos():
        return [int(s.split(":")[-1]) for s in get(
            ["xdotool", "getmouselocation"]
            ).split()if any(["x" in s, "y" in s])]
    
    limit = sorted([int(s.split("+")[1]) for s in get(
        "xrandr"
        ).split() if s.count("+") == 2])[-1]
    limit = limit-3 if screen == "left" else limit+3
    
    while True:
        pos = get_pos(); x_pos = pos[0]
        if condition(x_pos) == True:
            x = limit; y = pos[1]
            subprocess.Popen(["xdotool", "mousemove", str(x), str(y)])
        else:
            pass
        time.sleep(t)
    

    使用

    • 该脚本使用xdotool:

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

    • 使用屏幕 (left或right) 作为参数运行它,方法是:

      python3 /path/to/lock_cursor.py left
      

      或者

      python3 /path/to/lock_cursor.py right
      



    2. 自动设置两个独立鼠标的脚本

    这可能是一个棘手的问题,因为我没有 Wacom Bamboo,而且我无法在现场情况下进行“最终测试”。但是,使用我的普通第二只鼠标,它工作得很好(无论是使用不同的 ID 字符串)。

    如果它在您的情况下也可以正常工作,则可以合并两个脚本以在一次调用中运行;以下脚本仅在尚未执行双鼠标设置时才会执行。

    #!/usr/bin/env python3
    import subprocess
    import os
    import sys
    
    new_master = "Bamboo" 
    id_string = "Wacom Bamboo"
    
    def get(command):
        return subprocess.check_output(command).decode("utf-8")
    
    def execute(command):
        subprocess.call(["/bin/bash", "-c", command])
    
    def find_ids(xinp_data, id_string):
        return [l.split("=")[1].split()[0]
                for l in xinp_data.splitlines() if id_string in l]
    
    xinput_data = get(["xinput", "list"])
    
    if not "Bamboo pointer" in xinput_data:
        ids = find_ids(xinput_data,id_string)
        if not ids:
            print("Wacom Bamboo seems not to be connected")
        else:
            pass
            execute("xinput create-master "+new_master)
            for n in ids:
                execute("xinput reattach "+n+' "Bamboo pointer"')
    

    使用

    只需将脚本复制到一个空文件中,将其另存为setup_bamboo.py,然后通过以下命令运行它:

    python3 /path/to/setup_bamboo.py
    

    笔记

    • 我找不到另一种将鼠标锁定在一个屏幕上的方法,只能使用xdotool. 因此,(第一个)脚本在xdotool. 由于它以周期性循环运行,因此如果鼠标位置超出屏幕的限制,则会更正鼠标位置。结果是,尽管它实际上工作得很好,但您仍然会注意到“硬”栅栏的外观差异。

      我花了一些时间试图减少效果,每当鼠标接近屏幕的极限时“聪明地”增加循环速度,甚至让它取决于鼠标移动的方向。然而,最后我得出的结论是,所获得的改进是最小的,应该优先考虑编码的简单性。

    • 1

相关问题

  • 安装过程中无法识别键盘/鼠标

  • 为什么我不能点击东西(软件相关问题)?[关闭]

  • Firefox 鼠标中键滚动

  • 如何为不同的鼠标设置不同的设置?

  • 什么可能会阻止 xrandr 屏幕之间的鼠标移动?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve