2015-03-25 3 views
2

У нас есть устройства с сенсорными экранами, которые мы откалибровать с помощью xinput_calibrator, а затем применить настройки стартового скрипта для нашего приложения, вдоль линийXInput Калибровка экрана Противоречивые

xinput set-int-prop "Microchip Technology Inc. AR1100 HID-MOUSE" "Evdev Axis Calibration" 32 109 3841 161 3973 
xinput set-int-prop "Microchip Technology Inc. AR1100 HID-MOUSE" "Evdev Axes Swap" 8 1 
xinput set-int-prop "Microchip Technology Inc. AR1100 HID-MOUSE" "Evdev Axis Calibration" 32 3852 112 3970 159 

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

Мы новичок в X11 и не знаем, почему это происходит. Как будто наши операторы xinput обрабатываются иногда и игнорируются в других случаях, хотя ничего не изменилось, кроме перезагрузки.

Любые мысли о том, как обращаться с этим, оцениваются.

+0

Как работает ваш скрипт (при запуске или вручную, до или после запуска сервера X11)? При перезагрузках, где калибровка/своп не были применены, помогает ли снова запустить сценарий? Нужен ли полный перезапуск, или, возможно, повторный запуск сценария и перезапуск сервера X11? –

+0

Сценарий запускается во время init, явно после запуска x-сервера. Я не пробовал запустить скрипт во второй раз; это во встроенной системе, и очень сложно остановить наше приложение, чтобы возобновить его, поскольку все настроено на запуск автоматически, один раз, при загрузке. – SixDegrees

+0

Ну, вы могли бы добавить «sleep 60» в свой скрипт, чтобы убедиться, что все оседает, прежде чем запускать его. Вы также можете запустить строку «Axes Swap» дважды (с небольшим интервалом) для учета случаев, когда команда не принимается во внимание в первый раз. Наконец, вы можете зарегистрировать вывод 'xinput -list -long' и конец вашего скрипта и сравнить журналы, соответствующие успешным и неудачным конфигурациям. –

ответ

1

Поскольку, похоже, существует условие гонки между процессом запуска сервера X11 и вызовом xinput, вам нужно будет дождаться завершения процесса запуска. Я предлагаю вам проверить this answer за подсказку о том, как обнаружить, что X-сервер работает нормально.

Если это не сработает, попробуйте проверить код возврата xinput и дождаться успеха, прежде чем настраивать сенсорный экран. Например:

ts_dev="Microchip Technology Inc. AR1100 HID-MOUSE" 
ts_calibrate="Evdev Axis Calibration" 
ts_swap="Evdev Axes Swap" 

# repeat until xinput returns success for the first time 
while ! xinput set-int-prop "$ts_dev" "$ts_calibrate" 32 109 3841 161 3973 
do 
    sleep 1 
done 
xinput set-int-prop "$ts_dev" "$ts_swap" 8 1 
xinput set-int-prop "$ts_dev" "$ts_calibrate" 32 3852 112 3970 159 

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

+0

Пробовал это, и, похоже, он работает отлично. Я добавил счетчик циклов и обнаружил, что он занимает от 0 до 2 секунд, прежде чем команды будут успешными, что все еще кажется странным, но я вообще не видел сбоев при использовании этого подхода. Благодарю. – SixDegrees

Смежные вопросы