Почему мой скрипт входа в систему выполняется только частично?

Я установил Lubuntu 16.04 Xenial на планшет. По умолчанию экран ориентирован боком (например, Kindle или Nook), и на планшете нет акселерометров для автоматического обнаружения при повороте устройства. Это не имеет большого значения, поскольку я всегда буду использовать планшет как «монитор», то есть повернутый на 90 ° от его первоначальной ориентации (Kindle / Nook style).

Я написал сценарий для выполнения вращения при входе в систему, но по какой-то причине он выполняет поворот экрана дисплея, но не вход в сенсорный экран.

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

Вот сценарий:

#!/bin/bash sleep 3 xrandr -o right & while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ] do sleep 1 done xinput set-prop 'ELAN22A6:00 04F3:22A6' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1 xinput disable 'ASUS HID Device ASUS HID Device Touchpad'

Примечание. В списке xinput есть два устройства с почти одинаковым именем - сенсорный вход и указатель пера (который не будет использоваться). Устройство not - это сенсорный вход.

Кроме того, это может быть или не быть релевантным, но я также запускаю gnome-shell поверх Lubuntu, который также скрипт для запуска при входе в систему (потому что я не хочу, чтобы он был менеджером рабочего стола по умолчанию).

Что мне здесь не хватает?

5
задан 14 April 2017 в 00:45

10 ответов

Похоже, что вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 18 July 2018 в 15:01

Похоже, что вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 24 July 2018 в 20:32
  • 1
    Большое спасибо за ответ. К сожалению, похоже, что это не повлияло на результат. Я изначально пробовал этот код без цикла while, и когда это не сработало, я добавил цикл, потому что я думал, что системе нужно ждать ввода для инициализации в первую очередь. – Dean Rusmor 3 May 2017 в 01:27
  • 2
    Возможно, это связано с ручным запуском gnome-shell, который вы упомянули в своем вопросе. Если вы отключите это, это сработает? Изменить: вы также можете попробовать проверить конец / var / log / syslog для любого вывода ошибок из сценария и / или xinput после входа в систему. – d99kris 3 May 2017 в 03:25
  • 3
    На самом деле, да, я считаю, что вы правы - это , кажется, связано с gnome-shell. Тем не менее, похоже, что в syslog нет ничего особенно инкриминирующего для скрипта или xinput. Поэтому, когда я выключаю скрипт для вызова gnome-shell, все работает очень хорошо - сенсорная ориентация ввода надежно изменяется по желанию. Проблема в том, что мне нужно gnome-shell для запуска для нашего приложения. – Dean Rusmor 3 May 2017 в 18:09
  • 4
    Поэтому, как правило, я думаю, что неплохо запустить желаемый оконный менеджер, используя стандартный метод (ы). Но если вам действительно нужно запустить его таким образом, вы можете попытаться расширить свой скрипт, чтобы дождаться запуска gnome-shell, добавив что-то вроде этого: while [ -z "`pidof gnome-shell`" ]; do sleep 1; done в строке перед вашим существующим while-loop. Не могу сказать уверенно, что это сработает, но, вероятно, стоит попробовать. – d99kris 3 May 2017 в 18:37
  • 5
    Еще раз спасибо за ответ. Я действительно попробовал ваше предложение, но, к сожалению, это было бесполезно. Я сделал более-менее "доказать". что это должно быть каким-то образом связано с gnome-shell, потому что моим окончательным решением стал отдельный сценарий bash, в котором я просто грубо принудительно применяю преобразование, но я должен сначала спящий на 5-10 секунд, пока gnome-shell загружается. – Dean Rusmor 11 May 2017 в 23:31

Похоже, что вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 31 July 2018 в 12:36
  • 1
    Большое спасибо за ответ. К сожалению, похоже, что это не повлияло на результат. Я изначально пробовал этот код без цикла while, и когда это не сработало, я добавил цикл, потому что я думал, что системе нужно ждать ввода для инициализации в первую очередь. – Dean Rusmor 3 May 2017 в 01:27
  • 2
    Возможно, это связано с ручным запуском gnome-shell, который вы упомянули в своем вопросе. Если вы отключите это, это сработает? Изменить: вы также можете попробовать проверить конец / var / log / syslog для любого вывода ошибок из сценария и / или xinput после входа в систему. – d99kris 3 May 2017 в 03:25
  • 3
    На самом деле, да, я считаю, что вы правы - это , кажется, связано с gnome-shell. Тем не менее, похоже, что в syslog нет ничего особенно инкриминирующего для скрипта или xinput. Поэтому, когда я выключаю скрипт для вызова gnome-shell, все работает очень хорошо - сенсорная ориентация ввода надежно изменяется по желанию. Проблема в том, что мне нужно gnome-shell для запуска для нашего приложения. – Dean Rusmor 3 May 2017 в 18:09
  • 4
    Поэтому, как правило, я думаю, что неплохо запустить желаемый оконный менеджер, используя стандартный метод (ы). Но если вам действительно нужно запустить его таким образом, вы можете попытаться расширить свой скрипт, чтобы дождаться запуска gnome-shell, добавив что-то вроде этого: while [ -z "`pidof gnome-shell`" ]; do sleep 1; done в строке перед вашим существующим while-loop. Не могу сказать уверенно, что это сработает, но, вероятно, стоит попробовать. – d99kris 3 May 2017 в 18:37
  • 5
    Еще раз спасибо за ответ. Я действительно попробовал ваше предложение, но, к сожалению, это было бесполезно. Я сделал более-менее "доказать". что это должно быть каким-то образом связано с gnome-shell, потому что моим окончательным решением стал отдельный сценарий bash, в котором я просто грубо принудительно применяю преобразование, но я должен сначала спящий на 5-10 секунд, пока gnome-shell загружается. – Dean Rusmor 11 May 2017 в 23:31

Похоже, что вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 31 July 2018 в 23:34
  • 1
    Большое спасибо за ответ. К сожалению, похоже, что это не повлияло на результат. Я изначально пробовал этот код без цикла while, и когда это не сработало, я добавил цикл, потому что я думал, что системе нужно ждать ввода для инициализации в первую очередь. – Dean Rusmor 3 May 2017 в 01:27
  • 2
    Возможно, это связано с ручным запуском gnome-shell, который вы упомянули в своем вопросе. Если вы отключите это, это сработает? Изменить: вы также можете попробовать проверить конец / var / log / syslog для любого вывода ошибок из сценария и / или xinput после входа в систему. – d99kris 3 May 2017 в 03:25
  • 3
    На самом деле, да, я считаю, что вы правы - это , кажется, связано с gnome-shell. Тем не менее, похоже, что в syslog нет ничего особенно инкриминирующего для скрипта или xinput. Поэтому, когда я выключаю скрипт для вызова gnome-shell, все работает очень хорошо - сенсорная ориентация ввода надежно изменяется по желанию. Проблема в том, что мне нужно gnome-shell для запуска для нашего приложения. – Dean Rusmor 3 May 2017 в 18:09
  • 4
    Поэтому, как правило, я думаю, что неплохо запустить желаемый оконный менеджер, используя стандартный метод (ы). Но если вам действительно нужно запустить его таким образом, вы можете попытаться расширить свой скрипт, чтобы дождаться запуска gnome-shell, добавив что-то вроде этого: while [ -z "`pidof gnome-shell`" ]; do sleep 1; done в строке перед вашим существующим while-loop. Не могу сказать уверенно, что это сработает, но, вероятно, стоит попробовать. – d99kris 3 May 2017 в 18:37
  • 5
    Еще раз спасибо за ответ. Я действительно попробовал ваше предложение, но, к сожалению, это было бесполезно. Я сделал более-менее "доказать". что это должно быть каким-то образом связано с gnome-shell, потому что моим окончательным решением стал отдельный сценарий bash, в котором я просто грубо принудительно применяю преобразование, но я должен сначала спящий на 5-10 секунд, пока gnome-shell загружается. – Dean Rusmor 11 May 2017 в 23:31

Похоже, вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 2 August 2018 в 18:31

Похоже, вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 3 August 2018 в 20:49

Похоже, вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 5 August 2018 в 05:29

Похоже, вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 6 August 2018 в 22:37

Похоже, вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 9 August 2018 в 03:02

Похоже, вам не хватает backticks. Попробуйте изменить:

while [ -z "xinput | grep -v 'Pen' | grep 'ELAN'" ]

на

while [ -z "`xinput | grep -v 'Pen' | grep 'ELAN'`" ]
3
ответ дан 14 August 2018 в 21:20
  • 1
    Большое спасибо за ответ. К сожалению, похоже, что это не повлияло на результат. Я изначально пробовал этот код без цикла while, и когда это не сработало, я добавил цикл, потому что я думал, что системе нужно ждать ввода для инициализации в первую очередь. – Dean Rusmor 3 May 2017 в 01:27
  • 2
    Возможно, это связано с ручным запуском gnome-shell, который вы упомянули в своем вопросе. Если вы отключите это, это сработает? Изменить: вы также можете попробовать проверить конец / var / log / syslog для любого вывода ошибок из сценария и / или xinput после входа в систему. – d99kris 3 May 2017 в 03:25
  • 3
    На самом деле, да, я считаю, что вы правы - это , похоже, связано с gnome-shell. Тем не менее, похоже, что в syslog нет ничего особенно инкриминирующего для скрипта или xinput. Поэтому, когда я выключаю скрипт для вызова gnome-shell, все работает очень хорошо - сенсорная ориентация ввода надежно изменяется по желанию. Проблема в том, что мне нужно gnome-shell для запуска для нашего приложения. – Dean Rusmor 3 May 2017 в 18:09
  • 4
    Поэтому, как правило, я думаю, что неплохо запустить желаемый оконный менеджер, используя стандартный метод (ы). Но если вам действительно нужно запустить его таким образом, вы можете попытаться расширить свой скрипт, чтобы дождаться запуска gnome-shell, добавив что-то вроде этого: while [ -z "`pidof gnome-shell`" ]; do sleep 1; done в строке перед вашим существующим while-loop. Не могу сказать уверенно, что это сработает, но, вероятно, стоит попробовать. – d99kris 3 May 2017 в 18:37
  • 5
    Еще раз спасибо за ответ. Я действительно попробовал ваше предложение, но, к сожалению, это было бесполезно. Я сделал более-менее "доказать". что это должно быть каким-то образом связано с gnome-shell, потому что моим окончательным решением стал отдельный сценарий bash, в котором я просто грубо принудительно применяю преобразование, но я должен сначала спать на 5-10 секунд, пока gnome-shell загружается. – Dean Rusmor 11 May 2017 в 23:31

Другие вопросы по тегам:

Похожие вопросы: