Подключение графического планшета Wacom Pro в Linux или как bash помогает художникам
Если вы счастливый обладатель Intuos Pro и гордый пользователь Linux, то возможно вас постигла та же самая неудача, что и меня. Все дело в том, что на момент написания этой статьи, не было нормальной поддержки последних моделей графических планшетов фирмы Wacom. Однако благодаря проекту Linux Wacom и нескольких bash скриптов эту проблему можно решить.
Вся история началась с того, что мне для домашнего проекта нужно было много рисовать, а старый планшет Genius совсем для этого не подходил. И был куплен Wacom Intuos Pro Midlle. На компьютере с Win7 он очень легко поставился и настроился. Особенно порадовала возможность настройки профилей, чтобы присвоить клавишам на девайсе различные функции в зависимости от используемого приложения. Радости не было предела.
Попутно с этим я понял, что покупать Photoshop для проекта, который не приносит дохода — это совсем не интересно. Труд разработчиков, впрочем как и свою свободу, я ценю и потому ничем пиратским не пользуюсь. Взор был обращен в сторону свободного ПО.
Полазив по сайтам и форумам и недолюбливая Gimp, я остановился на программе Krita — очень удобном растровом редакторе, с богатыми настройками для кистей. Чтобы сразу избежать холивара, скажу, что Krita — это не замена Photoshop, но вот в плане рисования иногда более продвинут.
Что такое не везет
К этому времени мне пришлось полностью пересесть за компьютер с Ubuntu. Помня, что всегда видел в настройках раздел Wacom, я смело подключил провод планшета. И ничего… Тогда я подключил беспроводный адаптер. Никакого результата. Поиск и всякие советы — все тоже самое. В свое время я колдовал с настройками Genius и подумал, что где-то возник конфликт. Давно хотев попробовать Мяту и Cinnamon, я скачал и уставил ее. И снова ничего.
- Скачиваем последнюю версию драйвера ядра input-wacom отсюда:
http://sourceforge.net/projects/linuxwacom/files/latest/download - Если нужно, то устанавливаем зависимости:
sudo apt-get install build-essential libX11-dev libxi-dev x11proto-input-dev xserver-xorg-dev libxrandr-dev libncurses5-dev autoconf libtool
sudo apt-get install linux-headers-generic - Распаковываем
tar xjvf input-wacom-0.20.0.tar.bz2 - Переходим внутрь
cd input-wacom-0.20.0./configure —prefix=/usr
- Ставим сами драйвера из папки под свое ядро (у меня 3.7)
sudo cp ./3.7/wacom.ko /lib/modules/`uname -r`/kernel/drivers/input/tablet/wacom.kosudo depmod -a
Минуты счастья
Я снова был счастлив, пока не понял, что работают только 2 кнопки, а тач не отключается при рисовании стилусом. Под KDE и Gnome были GUI, а под мой Cinnamon пришлось использовать консольную утилиту xsetwacom, что в последствии дало более гибкую настройку, а в связке с bash — дополнительные возможности.
На сайте проекта есть примеры скриптов с xsetwacom, но они не рассчитаны под версию Intuos Pro. Пришлось опытным путем определять номера кнопок (они несколько хаотично разбросаны). Плюс к этому в списке устройств планшет по разному определяется, когда подключен проводом\без провода.
Довольно продвинутая настройка
Я не программист, но понадеялся, что в языке сценариев смогу разобраться. При помощи вывода с xsetwacom и grep в переменную всегда подставляется нужное устройство, а notify-send выводит используемый профиль.
#Название устройств, независимо от того, проводное или беспроводное подключение для планшета DEVICE_STYLUS=`xsetwacom list dev | grep -E -o ".*stylus"` DEVICE_ERASER=`xsetwacom list dev | grep -E -o ".*eraser"` DEVICE_CURSOR=`xsetwacom list dev | grep -E -o ".*cursor"` DEVICE_PAD=`xsetwacom list dev | grep -E -o ".*pad"` DEVICE_TOUCH=`xsetwacom list dev | grep -E -o ".*touch"` #Всплывающее предупреждение об используемом профиле. notify-send "Using Krita profile" #Рабочая область для стилуса #Для двух мониторов просто ширину 2 монитора прибавить к 1: MapToOutput 3286x1080+0+0 xsetwacom set "$DEVICE_STYLUS" MapToOutput 1920x1080+0+0 ## Настройки для стилуса xsetwacom set "$DEVICE_STYLUS" RawSample "2" # кол-во исходных данных для фильтрации точек xsetwacom set "$DEVICE_STYLUS" Threshold "27" # порог чувствительности пера xsetwacom set "$DEVICE_STYLUS" PressureCurve "5 10 90 95" # Кривая безье давления xsetwacom set "$DEVICE_STYLUS" TabletPCButton "off" # кнопки стилуса работают рядом с экраном xsetwacom set "$DEVICE_STYLUS" Mode "Absolute" # абсолютная либо относительная привязка курсора к экрану xsetwacom set "$DEVICE_STYLUS" Button 1 "1" # левый клик xsetwacom set "$DEVICE_STYLUS" Button 2 "3" # правый клик xsetwacom set "$DEVICE_STYLUS" Button 3 "2" # средний клик ## Резинка xsetwacom set "$DEVICE_ERASER" RawSample "2" xsetwacom set "$DEVICE_ERASER" Threshold "27" xsetwacom set "$DEVICE_ERASER" PressureCurve "0 10 90 100" xsetwacom set "$DEVICE_ERASER" Mode "Absolute" xsetwacom set "$DEVICE_ERASER" Button 1 "1" ## Сам планшет xsetwacom set "$DEVICE_PAD" Button 2 "key shift" xsetwacom set "$DEVICE_PAD" Button 3 "key ctrl" xsetwacom set "$DEVICE_PAD" Button 8 "key ctrl Z" xsetwacom set "$DEVICE_PAD" Button 9 "key ctrl shift A" # Неизвестно, где находятся эти кнопки #xsetwacom set "$DEVICE_PAD" Button 4 "key D" #xsetwacom set "$DEVICE_PAD" Button 5 "key E" xsetwacom set "$DEVICE_PAD" AbsWheelDown "5" # тачринг по часовой xsetwacom set "$DEVICE_PAD" Button 1 "key E" # кнопка внутри тачринга xsetwacom set "$DEVICE_PAD" AbsWheelUp "4" # тачринг против часовой xsetwacom set "$DEVICE_PAD" Button 10 "key ctrl K" xsetwacom set "$DEVICE_PAD" Button 11 "key ctrl M" xsetwacom set "$DEVICE_PAD" Button 12 "key O" xsetwacom set "$DEVICE_PAD" Button 13 "key I" xsetwacom set "$DEVICE_PAD" ScrollDistance "10" xsetwacom set "$DEVICE_PAD" TapTime "50"
В принципе из комментариев понятно, за что отвечает каждый параметр. Обратите внимание, как связаны физические клавиши с их номерами внутри программы.
Следующим разочарованием было то, что отсутствовали профили для различных программ. В принципе, можно сделать несколько скриптов и настроить горячие клавиши для активации каждого. Однако при частом переключении между приложениями, это начинает доставлять некоторые неудобства.
Bash в помощь
- awk — для поиска ID окна в выводе. Можно было обойтись и cutом или grepом, но почитав обсуждения, решил реализовать на awk
- xprop — используется для получения текущего окна в фокусе
- wmctrl — для получения списка ID окон, в которых есть нужное ключевое слово, например, Firefox — для переназначения клавиш при переключении на браузер. Также бывают случаи, когда запущено несколько окон, например, с именем Terminal, ID у них разные, а профиль должен быть один
#!/bin/bash awk_string1="/" awk_string2="/" window_in_focus_old="" while true do #ID окна, которое в фокусе window_in_focus=`xprop -root |awk '/_NET_ACTIVE_WINDOW/ '` #Если фокус на окне не изменился, то ничего не происходит if [[ "$window_in_focus" -ne "$window_in_focus_old" ]] then window_in_focus_old=$window_in_focus #список программ из файла list_of_progr=$("` # просматриваю этот список и если окно в фокусе - # запуск одноименного скрипта for running_progr in $list_of_running_prog do if [[ "$running_progr" -eq "$window_in_focus" ]] then $HOME/xsetwacom/$name_of_progr fi done done fi sleep 1 done
- Копируем папку wacom-profile-switcher в свою домашнюю директорию.
- В файл programs вносим названия тех приложений, для которых нужны профили. Названия должны соответствовать надписям из окон приложений, например: gedit, LibreOffece и т. д.
- Для каждого такого названия создаем файл, в который вносим нужные нам настройки графического планшета. Имена файлов должны быть написаны также, как в файле programs.
- Далее можно либо запускать скрипт при надобности, либо кинуть его в автозагрузку. Пока пользователь не переключится с одного окна на другое, сценарий будет только раз в секунду проверять, не сменился ли ID окна в фокусе.
Весь этот спортивный двухколесный тренажер тестировался на Linux Mint Petra и Wacom Pro M. По идее, он будет работать и на других членах семьи этой версии. Для всех остальных придется править скрипт, потому что не будут совпадать кнопки.
Хочу всплывающие подсказки и все тут!
И я все же надеюсь, что Wacom обратит свой взор на Linux и начнет выпускать нормальные драйвера, потому что иногда очень не хватает всплывающих подсказок о назначении клавиши при легком касании на нее, некоторых жестов. И тут одним сценарием не отделаешься.