Переменные оболочки по умолчанию являются строками. Некоторые оболочки поддерживают другие типы переменных, но вы должны сообщить об этом оболочке.
В любой оболочке в стиле POSIX ( sh
, кроме старых систем Unix, dash, bash, ksh, zsh и т. Д.) Вы можете использовать арифметическое расширение , чтобы указать оболочке для выполнения арифметических действий при анализе присвоения переменной.
t=20
s=$((t+30))
echo "$s"
(Двойные кавычки здесь не обязательны, но это хорошая привычка .)
Также можно сохранить текст выражения для оценки и выполнить арифметические операции при распечатке.
t=20
s=$((t+30))
echo "expression: $s; evaluated: $(($s))"
Но будьте осторожны с использованием явных подстановок переменных внутри арифметических выражений: они заменяются как текст, а не как арифметические подвыражения, поэтому приоритет операторов может выглядеть странно.
echo "$(($s*2))" # equivalent to $((t+30*2)), so prints 80, not 100
В bash, ksh или zsh вы можете вместо этого использовать let
или ((…))
для выполнения арифметических операций.
t=20
let s=t+30
echo "$s"
или
((t = 20))
((s = t + 30))
echo "$s"
или их варианты.
Другой возможностью в bash, ksh или zsh является использование встроенного набора typeset
для объявления переменной как целого числа. Затем каждое присваивание ему выполняет арифметическую оценку.
typeset -i s t
t=20
s=t+30
echo "$s"
Это может быть вызвано управлением питанием USB.
Попробуйте временно отключить управление питанием USB и посмотрите, исчезнет ли проблема:
сначала используйте lsusb
(часть пакета usbutils
), чтобы определить порт, который использует ваш тачпад:
Bus 002 Device 003: ID 18a5:0245 Verbatim, Ltd
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
В моем случае это будет приемник logitech unifying receiver на шине 001 Device 003.
Теперь найдите соответствующее устройство в /sys/, используя идентификатор производителя вашего устройства (в моем случае это 046d
):
grep 046d /sys/bus/usb/devices/*/idVendor
> /sys/bus/usb/devices/1-1.5/idVendor:046d
теперь скажите ядру держать устройство всегда включенным:
echo on >/sys/bus/usb/devices/1-1.5/power/control
если это поможет, вы можете отключить автоотключение в инструментах режима ноутбука. отредактируйте /etc/laptop-mode/conf.d/runtime-pm.conf
и добавьте AUTOSUSPEND_RUNTIME_DEVID_BLACKLIST="046d:c52b"
, где замените 046d:c52b
на id вашего устройства, заданный lsusb
. В моем случае я использовал более общий параметр, который отключает автоотключение для всех устройств человеческого интерфейса и устройств хранения: AUTOSUSPEND_RUNTIME_DEVTYPE_BLACKLIST="usbhid usb-storage"
У меня была такая же проблема в Ubuntu 18.04 LTS.
Установка этого пакета значительно улучшает реакцию сенсорной панели:
sudo apt-get install xserver-xorg-input-synaptics
Возможно, в вашем конкретном случае Synaptics Finger (298): 25, 30, 0
установлено слишком высокое значение.
. для мгновенного движения при любом давлении (используйте что-то более толковое позже):
xinput set-prop "SynPS/2 Synaptics TouchPad" "Synaptics Finger" 1 1 0
для вашего устройстваSynPS/2 Synaptics TouchPad
(получить имя устройства по:xinput list
)
"FingerLow" "integer": When finger pressure drops below this value, the driver counts it as a release. Property: "Synaptics Finger"
"FingerHigh" "integer": When finger pressure goes above this value, the driver counts it as a touch. Property: "Synaptics Finger"
Таким образом, проблема здесь может заключаться в «давлении», а не в расстоянии в пикселях.