Запуск приложений X11 после sudo/su (local)

Когда пользовательский процесс открывает последовательное устройство, такое как /dev/ttyS0или /dev/ttyACM0, linux по умолчанию поднимает строки DTR/RTSи удаляет их при закрытии.

Он делает это, вызывая обратный вызов dtr_rts, определенный драйвером.

К сожалению, пока нет никакого sysctl или подобного, который позволял бы отключить это раздражающее поведение (, которое в настоящее время очень мало используется ), поэтому единственное, что работает, — это удалить этот обратный вызов из tty_port_operationsдрайвера. структуру и перекомпилируйте модуль драйвера.

Вы можете сделать это для драйвера cdc-acm, закомментировав эту строку:

--- drivers/usb/class/cdc-acm.c~
+++ drivers/usb/class/cdc-acm.c
@@ -1063,7 +1063,7 @@
 }

 static const struct tty_port_operations acm_port_ops = {
-      .dtr_rts = acm_port_dtr_rts,
+       /*.dtr_rts = acm_port_dtr_rts, */
       .shutdown = acm_port_shutdown,
       .activate = acm_port_activate,
       .destruct = acm_port_destruct,

Это не помешает вам использовать DTR/RTSстроки через последовательные ioctl, такие как TIOCMSET, TIOCMBIC, TIOCMBIS, которые будут обрабатываться обратными вызовамиacm_tty_tiocmset()и т.д. структура acm_ops, как обычно.

Подобные хаки можно использовать и с другими драйверами; Я лично использовал это с последовательным драйвером PL2303usb ->.

[Разница информативна; это не будет применяться напрямую, потому что этот сайт искажает вкладки и пробелы]

2
30.11.2020, 23:06
1 ответ

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

От вашего пользователя выполните:

  $ xhost +si:localuser:otheruser

Затем вы можете suвойти в otheruser и запустить свою X-программу. Возможно, вам потребуется указать сервер:

   $ export DISPLAY=:0

   $ yourXprogram

См. справочную страницу xhost для получения дополнительной информации.

0
18.03.2021, 22:46

Теги

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