Я использую графический планшет Wacom под Ubuntu 18.04 ( Ядро: 4.15.0-72-generic
).
К сожалению, я не могу настроить его, используя системные настройки, потому что он не распознается должным образом.
Конфигурация через xsetwacom
работает, но не является постоянной. Как только я перезагружаю компьютер или подключаю устройство заново, загружаются настройки по умолчанию.
Я предположил, что самым простым решением было бы запустить сценарий конфигурации, как только планшет распознается как USB-устройство.
Насколько я понимаю, для этого потребуются два шага:
Создать правило udev
Я создал файл /etc/udev/rules.d/99-config_wacom_intuos.rules
с содержанием:
# "idVendor" и "idProduct" были получены из вывода команды lsusb.
ДЕЙСТВИЕ == "добавить" \
, ПОДСИСТЕМА == "ввод" \
, ЯДРО == "мышь *" \
, ATTRS {idVendor} == "1234" \
, ATTRS {idProduct} == "5678" \
, RUN + = "/ bin / sh -c '/usr/local/bin/config_wacom_intuos.sh >> /var/log/custom_logs/config_wacom_intuos.log 2> & 1'"
Этот файл имеет права доступа:
-rw-r - r-- 1 root root ...
(Словарь / var / log / custom_logs
также был создан мной.)
Создать сценарий конфигурации
Я создал файл / usr / local / bin / config_wacom_intuos.sh
с содержанием:
#! / bin / bash
#coding: utf8
# Это были пропущенные утверждения, как предполагалось в ответе.
#export DISPLAY =: 1
#export XAUTHORITY = / run / user / 1000 / gdm / Xauthority
echo "` date '+% Y-% m-% dT% H:% M:% S``, ShellPID $$, start "
спать 1
если xsetwacom - список устройств | grep -q "Wacom Intuos BT"
тогда
main_screen = "ГОЛОВА-0"
bezier_args = "0 20 80 100"
positioning_mode = "Абсолютный"
raw_sample_lvl = "9"
suppress_lvl = "10"
# Сопоставляет графический планшет с областью указанного экрана (для многоэкранных сред).
xsetwacom set "Стилус Wacom Intuos BT S Pen" MapToOutput "$ main_screen"
xsetwacom set "Ластик Wacom Intuos BT S Pen" MapToOutput "$ main_screen"
xsetwacom set "Курсор Wacom Intuos BT S Pen" MapToOutput "$ main_screen"
# Изменяет чувствительность к давлению.
xsetwacom set "Стилус Wacom Intuos BT S Pen" PressureCurve "$ bezier_args"
xsetwacom set "Ластик Wacom Intuos BT S Pen" PressureCurve "$ bezier_args"
# Сглаживает нарисованные линии, уменьшая дрожание.xsetwacom set "Стилус Wacom Intuos BT S Pen" RawSample "$ raw_sample_lvl"
xsetwacom set "Стилус Wacom Intuos BT S Pen" Подавить "$ suppress_lvl"
xsetwacom set "Ластик Wacom Intuos BT S Pen" RawSample "$ raw_sample_lvl"
xsetwacom set "Ластик Wacom Intuos BT S Pen" Подавить "$ suppress_lvl"
xsetwacom set "Курсор Wacom Intuos BT S Pen" RawSample "$ raw_sample_lvl"
xsetwacom set "Курсор Wacom Intuos BT S Pen" Подавить "$ suppress_lvl"
# Определяет режим позиционирования («Абсолютный» / «Относительный»)
xsetwacom set «Стилус Wacom Intuos BT S Pen» Режим «$ positioning_mode»
xsetwacom set "Ластик Wacom Intuos BT S Pen" Режим "$ positioning_mode"
xsetwacom set "Курсор Wacom Intuos BT S Pen" Режим "$ positioning_mode"
# Назначает действия кнопкам планшета.
xsetwacom set "Панель управления Wacom Intuos BT S Pad" Кнопка 1 "клавиша + ctrl z -ctrl"
xsetwacom set "Панель управления Wacom Intuos BT S Pad" Кнопка 2 "клавиша + ctrl + shift z -ctrl -shift"
xsetwacom set "Панель управления Wacom Intuos BT S Pad" Кнопка 3 "клавиша 0xffab"
xsetwacom set "Панель управления Wacom Intuos BT S Pad" Кнопка 8 "клавиша 0xffad"
еще
echo "НЕТ 'УСТРОЙСТВА WACOM INTUOS BT' ОБНАРУЖЕНЫ."
фи
echo "` date '+% Y-% m-% dT% H:% M:% S``, ShellPID $$, end "
echo -e "--- \ n"
выход 0
У этого файла есть права доступа:
-rwxr-xr-x 1 root root ...
Скрипт отлично работает, когда я запускал его вручную с терминала.
Это также выполняется, когда я подключаю устройство. К сожалению, похоже, это ни на что не влияет.
Кроме того, сценарий выполняется несколько раз подряд после подключения устройства.
Я предполагаю, что такое поведение происходит из-за правила udev, которое не является достаточно строгим.
Кто-нибудь может сказать мне, что я делаю не так?
Инструменты X-сервера обычно влияют только на ваш текущий сеанс (именно поэтому вы должны устанавливать их каждый раз).
Поскольку вы запускаете этот скрипт в оболочке, которая не привязана ни к какому X-сеансу, инструмент не имеет ни малейшего представления, для какого X-сеанса следует изменить эти настройки (точнее, он не имеет ни малейшего представления что сеанс X даже существует).
Вы можете вручную подключить свою оболочку к текущему X-сеансу, но иногда это решение может оказаться ненадежным.
Вам нужно добавить в скрипт два экспорта переменных: одну для DISPLAY
и XAUTHORITY
. Они используются для идентификации и доступа к правильному сеансу X. Вы можете получить соответствующие значения, запустив env
, войдя в систему как обычный пользователь.
В моем случае вывод выглядит следующим образом (части, отмеченные [...]
опущены):
$ env
[...]
XAUTHORITY=/home/tim/.Xauthority
[...]
DISPLAY=:0.0
[...]
Для этих значений мне нужно было бы расширить скрипт следующими строками :
export DISPLAY=:0.0
export XAUTHORITY=/home/tim/.Xauthority
Теперь скрипт должен работать, даже если вы являетесь пользователем root.
Сама конфигурация udev выглядит нормально.