Могут ли быть обнаружены изменения параметров терминала на ведомой стороне на главном устройстве ?

Попробуйте использовать zenity или аналогичную команду, подобную диалоговому окну:

zenity --yesno 'do you want to suspend?'

Она задает вопрос в диалоговом окне с «да» и кнопки «нет». Как только вы нажмете одну из этих кнопок, он распечатает ответ о стандартной ошибке (я полагаю). Если вы это зафиксируете, вы можете попросить сценарий решить, что делать, на основе выбора, сделанного пользователем.

zenity имеет гораздо больше параметров для диалогового окна; они задокументированы на странице руководства.

2
25.05.2019, 23:12
1 ответ

Да, могут (В Linux, OpenBSD и NetBSD, но не во FreeBSD [1] ).

Для этого вы включаете пакетный режим на мастере pty с помощью ioctl(master_fd, TIOCPKT, &on), после чего каждый read()со стороны мастера будет возвращать «пакет», где первый байт равен либо 0 (для фактического данные )или битовая маска; в последнем случае, если установлен бит TIOCPKT_IOCTL, это означает, что ведомое устройство изменило настройки терминала.

Вы можете получить новые настройки с помощью tcgetattr()либо на ведущем, либо на ведомом fd, как обычно.

Дополнительная (неполная )информация на справочной странице tty_ioctl(4).

Background for this question comes from wanting to create a multiplexer for a serial terminal. The multiplexer process would consume the serial terminal /dev/ttyUSB0 and expose multiple slave pseudo-terminals for other application to work with.

Я не буду вам этого советовать.Большинство программ, которые работают с последовательными tty, предполагают использовать ioctl, такие как TIOCMSET(, для установки DTRи т. д. ), которые не работают с псевдотерминалами и не могут быть переданы через них. Уже существует множество серийных «снифферов», которые используют pty и ужасно терпят неудачу в том, что должны делать, только из-за этого.

[1] В *BSD все немного иначе; вы также должны включить «внешнюю обработку» с помощью ioctl(EXTPROC), а пакет с установленным битом TIOCPKT_IOCTLтакже содержит фактический struct termiosс новыми настройками в качестве своих данных. К сожалению, внешняя обработка была удалена во FreeBSD phk .

2
27.01.2020, 22:08

Теги

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