Попробуйте использовать zenity
или аналогичную команду, подобную диалоговому окну:
zenity --yesno 'do you want to suspend?'
Она задает вопрос в диалоговом окне с «да» и кнопки «нет». Как только вы нажмете одну из этих кнопок, он распечатает ответ о стандартной ошибке (я полагаю). Если вы это зафиксируете, вы можете попросить сценарий решить, что делать, на основе выбора, сделанного пользователем.
zenity
имеет гораздо больше параметров для диалогового окна; они задокументированы на странице руководства.
Да, могут (В 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 .