Подключение графического планшета 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, я скачал и уставил ее. И снова ничего.

На выручку пришел Linux Wacom Tablet Project, одним из основных авторов которого является сотрудник Red Hat Питер Хаттерер. Не скажу, что все с первого раза стало гладко, но вот такая последовательность действий с askubuntu мне помогла:
  1. Скачиваем последнюю версию драйвера ядра input-wacom отсюда:
    http://sourceforge.net/projects/linuxwacom/files/latest/download
  2. Если нужно, то устанавливаем зависимости:
    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
  3. Распаковываем
    tar xjvf input-wacom-0.20.0.tar.bz2
  4. Переходим внутрь
    cd input-wacom-0.20.0

    ./configure --prefix=/usr
  5. Ставим сами драйвера из папки под свое ядро (у меня 3.7)
    sudo cp ./3.7/wacom.ko /lib/modules/`uname -r`/kernel/drivers/input/tablet/wacom.ko

    sudo depmod -a

В зависимости от того, был ли подключен планшет, может потребоваться перезагрузка.

Минуты счастья


Я снова был счастлив, пока не понял, что работают только 2 кнопки, а тач не отключается при рисовании стилусом. Под KDE и Gnome были GUI, а под мой Cinnamon пришлось использовать консольную утилиту xsetwacom, что в последствии дало более гибкую настройку, а в связке с bash — дополнительные возможности.

На сайте проекта есть примеры скриптов с xsetwacom, но они не рассчитаны под версию Intuos Pro. Пришлось опытным путем определять номера кнопок (они несколько хаотично разбросаны). Плюс к этому в списке устройств планшет по разному определяется, когда подключен проводом\без провода.

Довольно продвинутая настройка


Я не программист, но понадеялся, что в языке сценариев смогу разобраться. При помощи вывода с xsetwacom и grep в переменную всегда подставляется нужное устройство, а notify-send выводит используемый профиль.
Пример скрипта для Krita
#Название устройств, независимо от того, проводное или беспроводное подключение для планшета
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="/{print \$1}"
window_in_focus_old=""

while true
do
  #ID окна, которое в фокусе
  window_in_focus=`xprop -root |awk '/_NET_ACTIVE_WINDOW/ {print $5; exit;}'`
  #Если фокус на окне не изменился, то ничего не происходит
  if [[ "$window_in_focus" -ne "$window_in_focus_old" ]]
   then
   	  window_in_focus_old=$window_in_focus
  	  #список программ из файла
      	  list_of_progr=$(<$HOME/xsetwacom/programs)	
	  # цикл по названиям программ
	  for name_of_progr in $list_of_progr
	  do
	  	awk_string_result="$awk_string1$name_of_progr$awk_string2"
	  	# список окон, в которых есть слово из списка програм
	  	list_of_running_prog=`wmctrl -l | awk "${awk_string_result}"`
	  	# просматриваю этот список и если окно в фокусе - 
		#  запуск одноименного скрипта
	  	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


В целом алгоритм установки следующий:
  1. Копируем папку wacom-profile-switcher в свою домашнюю директорию.
  2. В файл programs вносим названия тех приложений, для которых нужны профили. Названия должны соответствовать надписям из окон приложений, например: gedit, LibreOffece и т. д.
  3. Для каждого такого названия создаем файл, в который вносим нужные нам настройки графического планшета. Имена файлов должны быть написаны также, как в файле programs.
  4. Далее можно либо запускать скрипт при надобности, либо кинуть его в автозагрузку. Пока пользователь не переключится с одного окна на другое, сценарий будет только раз в секунду проверять, не сменился ли ID окна в фокусе.


Весь этот спортивный двухколесный тренажер тестировался на Linux Mint Petra и Wacom Pro M. По идее, он будет работать и на других членах семьи этой версии. Для всех остальных придется править скрипт, потому что не будут совпадать кнопки.

Хочу всплывающие подсказки и все тут!


И я все же надеюсь, что Wacom обратит свой взор на Linux и начнет выпускать нормальные драйвера, потому что иногда очень не хватает всплывающих подсказок о назначении клавиши при легком касании на нее, некоторых жестов. И тут одним сценарием не отделаешься.

Для удобства разместил все скрипты на гитхабе
Поделиться публикацией

Похожие публикации

Комментарии 20
    +3
    А почему не mypaint?
      +2
      Mypaint всем хорош, особенно с его бесконечным холстом. Но в Krita меня подкупает достаточно большой набор встроенных фильтров, настройки сглаживания кистей (удобно рисовать плавные линии) и развитый инструментарий для выделения и трансформирования, есть даже wrap по точкам. Ах да, и различные кисти для комиксов
        0
        А с Corel Painter сравнивали?
          0
          Немного сравнивал. Создатели на ранних этапах вроде даже ориентиром брали Corel Painter. В целом движок для кистей в Krita для меня более удобен. Плюс Krita все же бесплатный. Хотя сложные кисти на CP у меня тормозили меньше, чем у обсуждаемого.
            0
            Вот кстати да… В Painter Гуашевые кисти довольно требовательны. Попробую криту. Если попроще будет, то самое оно.
            Я вот на Bamboo Pen & Touch пытаюсь технику У-Син сымитировать. В фотошопе не судьба, в Painter получше, но сложновато управление.
              0
              В У-Син важен наклон пера, и в принципе, если планшет поддерживает, то Krita позволяет навешивать события о наклоне стилуса на кисти. И сразу ставьте дополнительные кисти, вот тут http://krita.org/resources в разделе Brush Sets, довольно много от различных художников.
                0
                Скорее всего Бамбук не выдает такую инфу. Ни в фотожабе, ни в пэйнтере не увидел реакции на наклон. Быть может это настраивать еще нужно. Не знаю.
          0
          Вот по кистям я бы не сказал, что у krita хорошо. Может быть с непривычки, но как-то сильно неудобно. В частности, двухкнопочные хоткеи (вместо однокнопочных у mypaint).

          Хотя присмотреться стоит, спасибо за название.
            0
            offtopic: Динозавриков не вы ли рисуете?)
              0
              Точно не я)
                0
                нет, специально нанятый человек.
              0
              У Криты в 2.8 тоже бесконечный холст. Правда, там нужно дополнительное телодвижение для этого делать.
            0
            Спасибо за инструмент! Нужно попробовать…
              +1
              Пожалуйста. Надеюсь что-то усовершенствуете.
                0
                Ай-я-ай! И так времени нехватка… А Вы еще и подначиваете :)
              0
              В gnome 3.10 конфигуратор wacom просто шикарный! У меня wacom intuos 4 и «из коробки» работают даже led экранчики на планшете.
                0
                Да, четверка почти везде сейчас из «коробки». Проблема с пятым поколением. Хотя, понятное дело, это временно. И спасибо за наводку на конфигуратор, а то led мертвым грузом сейчас на планшете. Скажите, а профили переключения реализованы в нем?
                  0
                  А вот профили еще не реализовали, насколько я понял. Похоже придется использовать одни бинды для всех программ, но это, я думаю, тоже временно.
                +1
                Я только не понял, что значит «Wacom обратит внимание на Linux». Проект LinuxWacom и начат сотрудницей компании хренадцать лет назад. И сейчас в нём двое вакомовцев.

                Ну и желанный OSD в гномовском конфигураторе тоже есть.
                  0
                  Большое спасибо за информацию, не знал что гномовский конфигуратор так хорош.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое