Когда пользовательский процесс открывает последовательное устройство, такое как /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
, как обычно.
Подобные хаки можно использовать и с другими драйверами; Я лично использовал это с последовательным драйвером PL2303
usb ->.
[Разница информативна; это не будет применяться напрямую, потому что этот сайт искажает вкладки и пробелы]
Вам необходимо добавить разрешения, чтобы другой пользователь мог получить доступ к вашему дисплею.
От вашего пользователя выполните:
$ xhost +si:localuser:otheruser
Затем вы можете su
войти в otheruser и запустить свою X-программу. Возможно, вам потребуется указать сервер:
$ export DISPLAY=:0
$ yourXprogram
См. справочную страницу xhost для получения дополнительной информации.