Guest User

11/08/22

a guest
Aug 11th, 2022
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.70 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. import pyudev
  4. import subprocess
  5. from time import sleep
  6. import re
  7. import os
  8.  
  9. def message(title, message):
  10.     os.system('notify-send "' + title + '" "'+message + '"')
  11.  
  12.  
  13. def get_name_of_devices():
  14.     get_names = subprocess.Popen(
  15.         ['xsetwacom', '--list'],
  16.         stdout=subprocess.PIPE
  17.     )
  18.  
  19.     k = str(get_names.communicate()[0])[2:-3]
  20.     k = re.sub(r'[\s]+', ' ', k)  # убрали лишние пробелы
  21.     k = re.sub(r'[\s]+$', '', k)  # пробел на конце
  22.     k = re.sub(r'[\s]*\\tid: \d*', '', k)  # убрали инфу об id
  23.  
  24.     k = re.split(r'[\s]*\\n', k)  # и разделили на 2 строки
  25.     for i in range(len(k)):
  26.         k[i] = re.split(r'[\s]*\\t', k[i])
  27.         k[i][1] = re.sub(r'type: ', '', k[i][1])  # type - STYLUS / PAD
  28.  
  29.     # на выходе получаем что-то вроде:
  30.     # [['GAOMON Gaomon Tablet Pen stylus', 'STYLUS'],
  31.     # ['GAOMON Gaomon Tablet Pad pad', 'PAD']]
  32.  
  33.     if k[0][1] == 'STYLUS':  # название стилуса возвращает первым
  34.         return k[0][0], k[1][0]
  35.     else:
  36.         return k[1][0], k[0][0]
  37.  
  38.  
  39. def binding(start_command, binds):
  40.     errors = ''
  41.     for keys in binds:
  42.         # stdin=subprocess.PIPE,
  43.         # stdout=subprocess.PIPE,
  44.         status = subprocess.Popen(start_command + keys,
  45.                                  stderr=subprocess.PIPE)
  46.         status.wait()
  47.         errors += status.stderr.read().decode()
  48.     return errors
  49.  
  50. #########################################################################
  51.  
  52. stylus_binds = [['3', 'key Ctrl z']]
  53.  
  54. pad_binds = [ ['1', 'key P'],
  55.                  ['2', 'key Shift e'],
  56.                  ['3', 'key Ctrl s'],
  57.                  ['8', 'key Ctrl y']
  58.                ]
  59.  
  60. context = pyudev.Context()
  61. monitor = pyudev.Monitor.from_netlink(context)
  62. monitor.filter_by(subsystem='input')
  63.  
  64. for action, device in monitor:
  65.     if action == 'add' and 'js0' in str(device):
  66.         print('Был подключен Gaomon S620 graphic tablet!')
  67.         message('Gaomon S620', 'Был подключен')
  68.  
  69.         for try_bind in range(0, 3):
  70.             sleep(5)
  71.             stylus_name, pad_name = get_name_of_devices()
  72.  
  73.             for_errors = binding(['xsetwacom', '--set', stylus_name, 'Button'],
  74.                                  stylus_binds)
  75.             for_errors += binding(['xsetwacom', '--set', pad_name, 'Button'],
  76.                                   pad_binds)
  77.  
  78.             if for_errors:
  79.                 message('Gaomon S620', 'Обнаружены ошибки!\n' + for_errors)
  80.             else:
  81.                 message('Gaomon S620', 'Успешный бинд!')
  82.                 break
Advertisement
Add Comment
Please, Sign In to add comment