Существует ли способ заставить сценарий Bash ввести определенное нажатие клавиши?

Установка и использование gksudo вместо этого, это похоже на фронтенд sudo.

сам gksu не расценит sudoers файл.

1
03.02.2014, 00:55
5 ответов

Если Вы хотите взаимодействовать с tmux в сценарии это - то, где Вы хотите использовать tmux ... tmux-command. Как:

tmux kill-session

Выходить из текущей сессии.

tmux kill-server

Выходить из сервера (уничтожает все сессии).

tmux detach-client

отсоединять клиент (выход, но можно повторно прикрепить позже).

5
27.01.2020, 23:11
  • 1
    я использую SSH с tmux; когда я работаю tmux kill-session, это уничтожило бы мой конец, или Raspberry Pi (что я - SSH'ing к), конец? –  evamvid 01.02.2014, 19:17
  • 2
    @evamvid, tmux говорит с tmux сервером через сокет домена Unix (чей путь находится в $TMUX), таким образом, это может только говорить с tmux сервером на той же машине, таким образом, процесс может только уничтожить tmux сессию, которая работает на той же машине. –  Stéphane Chazelas 01.02.2014, 20:58

Отвечать на вопрос в заголовке.

Способ моделировать нажатие клавиши в терминале через TIOCSTI

Например:

insert() {
  perl -le 'require "sys/ioctl.ph";
            ioctl(STDIN, &TIOCSTI, $_) or
              die "$!\n" for split "", join " ", @ARGV' "$@"
}

Однако в случае tmux, если Вы делаете:

insert $'\02'

в a tmux область, которая вставит ^B символ во входном буфере терминала той области, не любой из терминалов, присоединенных к текущей сессии tmux читает его вход из.

Решение состояло бы в том, чтобы сделать:

insert $'\02' < "$(tmux lsc -F '#{client_tty}' -t '' | head -n 1)"

Где:

tmux lsc -F '#{client_tty}' -t ''

сообщает терминал (терминалы), присоединенный к рабочей сессии.

Но в современных системах Linux, которые не будут работать (Вы получите Операцию, не разрешенную ошибку), потому что из соображений безопасности TIOCSTI ioctl может только быть выпущен к Вашему терминалу управления (и терминал управления оболочки, интерпретирующей сценарий в a tmux область была бы терминалом области).

Необходимо было бы спросить tmux чтобы сделать это, и я не уверен, что это возможно.

2
27.01.2020, 23:11

Можно легко закрыть tmux путем выполнения:

pkill -term tmux

Это отправит tmux: "Делайте, что хочется близко"

1
27.01.2020, 23:11

Можно использовать xdotool для отправки нажатий клавиш, если действительно необходимо.

xdotool search "Konsole" windowactivate --sync key --clearmodifiers ctrl+b
4
27.01.2020, 23:11

Другой полезный *инструмент NIX для автоматизации взаимодействий с терминальными программами, Ожидайте:

http://www.nist.gov/el/msid/expect.cfm

0
27.01.2020, 23:11

Теги

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