Сценарий, свяжите мой Бамбук Wacom с моим вторым монитором и моей мышью к первому монитору. Привязка для Бамбуковых работ Wacom, прекрасных с настройками для планшета. Но как я могу связать свою мышь с другим монитором?
Мои текущие шаги:
Свяжите Бамбук Wacom с моим вторым монитором
Настройте два независимых указателя
С включенным Бамбуком Wacom и моей мышью, 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)]
Создайте новое устройство с
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)]
Повторно прикрепите Бамбуковые идентификаторы Wacom
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)]
Ответу ниже, возможно, понадобилось бы некоторое дополнительное редактирование. Для создания двух отдельных мышей я выполнил шаги, упомянутые в вопросе. Это действительно работало, но моя "нормальная" мышь имела некоторые проблемы впоследствии. Щелкните левой кнопкой не работал в некоторых ситуациях.
Так как Вы не упоминаете побочный эффект в своем вопросе, я предполагаю, что он имеет отношение к аппаратным средствам - определенная конфликтующая функциональность обеих мышей, которых я подключил.
Хорошие новости - это xdotool
по-видимому только "видит" координаты "основной" мыши, которая позволяет запереть курсор на одном из экранов.
Ниже двух сценариев:
#!/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
Это могло бы быть хитрым, так как я не владею Бамбуком Wacom, и я не мог сделать "завершающего испытания" в живой ситуации. С моей обычной второй мышью это хорошо работало однако (быть этим с различными строками идентификатора).
Если это также хорошо работает в Вашей ситуации, оба сценария могли бы быть объединены для выполнения в одном вызове; сценарий ниже только принимает меры, если двойное - установка мышей еще не была выполнена.
#!/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
. Так как это работает в периодическом цикле, положение мыши исправлено, если это нарушает границу предел экрана. Последствие - то, что, хотя эффективно это хорошо работает, Вы все еще заметите косметическое различие с "твердым" забором.
Я провел некоторое время, пытаясь уменьшить эффект, "энергично" увеличивая скорость цикла каждый раз, когда мышь около предела экрана или даже создания его зависящая от направления, мышь перемещается в. В конце однако я пришел к выводу, что полученное улучшение минимально, и простота кодирования должна быть предпочтена.