Почему я не могу отправлять escape-последовательности с клавиатуры, но могу сделать это с другого терминала?

Я бы предложил вам использовать интерфейс Bonding. Bonding interface позволяет добавлять интерфейсы в bond, устанавливать один интерфейс как основной и настраивать их как active-backup.

Сначала установите пакет ifenslave, остановите работу сети и загрузите модуль ядра bonding:

sudo apt-get install ifenslave
sudo stop networking
sudo modprobe bonding

Обновите конфигурацию интерфейса в файле /etc/network/interfaces:

auto bond0
iface bond0 inet dhcp
  bond-slaves none
  bond-mode active-backup
  bond-miimon 100

auto eth0
iface eth0 inet dhcp
  bond-master bond0
  bond-primary eth0

auto eth1
iface eth1 inet dhcp
  bond-master bond0

Это создаст интерфейс bonding bond0, установленный как active-backup, и настроит интерфейсы eth0 и eth1 как slave для bond0. Bond-primary тег настраивает eth0 как основной интерфейс и оставляет eth1 в качестве резервного.

Затем перезапустите сеть:

sudo start networking

Вы также можете посмотреть это руководство о bonding в Ubuntu https://help.ubuntu.com/community/UbuntuBonding

И для получения дополнительной информации о bonding интерфейсов посмотрите здесь https://www.kernel.org/doc/Documentation/networking/bonding.txt

3
13.09.2019, 02:16
2 ответа

Когда вы запускаете echo, вы отправляете вывод на терминал. Терминал интерпретирует escape-последовательности, например, для изменения цвета в отправляемом ему выводе. Эти escape-последовательности предназначены для отправки приложениями, поэтому они распознаются в выводе, который поступает из приложения, работающего в терминале. Обычно приложение, работающее в терминале, запускается эмулятором терминала (вашей оболочкой )и теми, которые запускаются им по очереди, но если вы запустите echo … >/dev/tty2, то echoфактически «работает в терминале». ” (в том смысле, что его вывод идет на терминал, что здесь имеет значение ).

Когда вы нажимаете Esc [ и т. д., вы отправляете ввод на терминал. Терминал не интерпретирует escape-последовательности, например, для изменения цвета на входе, который он получает. Терминал интерпретирует escape-последовательности при вводе, но для совершенно другой цели :они представляют собой способ кодирования нажатий функциональных клавиш.

Как работает ввод с клавиатуры и вывод текста? имеет соответствующую предысторию.

5
27.01.2020, 21:15

Это работает даже в xterm в xorg:

stty -echoctl
sleep <a bit>

Затем на «мертвом» терминале вы можете напрямую нажать Escape, а затем

[32m

и следующие клавиши, которые вы нажимаете, уже зеленые! Если вы убьете сон с помощью Ctrl -C, ваша подсказка останется чистой...

enter image description here

Вопрос — это особый случай --способ вывода управляющей последовательности с клавиатуры на экран, в то время как readline/bash находится в коме.

С нормальным echoctl/ctlecho, после sleepоболочка повторяет нажатия клавиш (ввод ), но также выводит клавишу escape непосредственно как ^[на экран (вывод ). Специальное значение как «ввод управляющей последовательности (CSI )утрачено.

Так разве (принятый )ответ не неверен?


Здесь я нажимаю ctrl -C с курсором на "l" в "строке", как будто я решаю прервать и не продолжать редактирование строки:

$  weird -cmd ^Cne
$  stty -echoctl
$  weird -cmd line
$  # nice but now it looks like it got exec'd

По-видимому, это основной эффект этой опции stty echoctl.

Я только что понял, что пресса Escape— это сокращение от control-[или ^[. Так что логично, что tty просто сразу выдает ECHO ^[ char, а не ждет последовательности. После sleepс обычным эхо-вызовом клавиша Home генерирует ^[[H. Без echoctl, то есть после stty -echoctl, клавиша Home... помещает курсор вверху слева моего экрана xterm!

(Когда bash бодрствует, клавиша Home работает :в начале строки.)

эти две строки bind -pвстроены в /terminfo xterm:

"\eOH": beginning-of-line
"\e[H": beginning-of-line
1
27.01.2020, 21:15

Теги

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