Отправка нажатий клавиш в удаленный сеанс X через SSH

Я могу предложить обходной путь к этому

Не обращая внимания на настройки в графическом интерфейсе, вы можете заблокировать экран и отправить свои экраны в режим ожидания через командную строку


[1114 ] Для блокировки экрана вы можете использовать

gnome-screensaver-command -l

или (если вы не используете gnome3)

xdg-screensaver lock

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

xset dpms force off

Теперь, так как вы не хотите делать это вручную, но через пару минут простоя, нам нужно выяснить, как долго вы простаивали. Это можно сделать с помощью xprintidle

sudo apt-get install xprintidle

xprintidle будет возвращать миллисекунды простоя (xserver)

Теперь давайте объединим это в скрипт (*). Используйте ваш любимый редактор, чтобы скопировать / вставить следующее, изменив IDLE_TIME по своему вкусу

nano /home/yourusername/idle_stby_lock_screen.sh
#!/bin/sh

# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))  # replace the '5' with how many minutes you'd like


# Sequence to execute when timeout triggers.
trigger_cmd() {
    echo "Triggered action $(date)"
}

sleep_time=$IDLE_TIME
triggered=false

while sleep $(((sleep_time+999)/1000)); do
    idle=$(xprintidle)
    if [ $idle -ge $IDLE_TIME ]; then
        if ! $triggered; then
            gnome-screensaver-command -l
            export DISPLAY=:0; xset dpms force off
            triggered=true
            sleep_time=$IDLE_TIME
        fi
    else
        triggered=false
        # Give 150 ms buffer to avoid frantic loops shortly before triggers.
        sleep_time=$((IDLE_TIME-idle+150))
    fi
done

Затем сделайте его исполняемым с помощью

chmod +x /home/yourusername/idle_stby_lock_screen.sh

Вы можете проверить это в командной строке

/home/yourusername/idle_stby_lock_screen.sh

, если вы довольны ею, вы можете добавить ее в автозагрузку вашего Ubuntu, например, , описанную в этих ответах здесь , или с помощью приложения «Запуск» в Ubuntu - просто убедитесь, что вы используете абсолютный путь к вашему скрипту.

12
задан 15.04.2020, 20:21

2 ответа

Вы должны быть в состоянии сделать это, используя команду xdotool, после указания соответствующего дисплея X, например, для имитации одиночного нажатия кнопки «стрелка вниз» в текущем активном окне

$ DISPLAY=:0 xdotool getactivewindow key Down

Для ввода буквенного текста можно использовать xdotool type <string>, например

$ DISPLAY=:0 xdotool getactivewindow type 'your text here'

Пакет xdotool должен быть доступен в репозитории Universe.

0
ответ дан 15.04.2020, 20:22
  • 1
    Я don' t отклоняют, это работает, но it' s немного скудный, если you' ре, пытающееся вводить в сетевом месте один ключ за один раз. – MagicFlow 15.04.2020, 20:22
  • 2
    Можно использовать xdotool type для отправки полных строк, поскольку - введенный - посмотрите мое редактирование выше. – Mike Donovan 15.04.2020, 20:23

Используя x2x и некоторую пересылку X11, я заставил это работать.

ssh -X htpc x2x -to :0

Единственным недостатком в настоящее время является то, что мне пришлось столкнуться с TTY, чтобы убить SSH, чтобы выйти из него. Все еще смотрю, как бросить курить, когда я закончу! В противном случае, это довольно приятный и простой (и ярлык) метод для передачи ввода с одного компьютера на другой.

Редактировать: добавление -nomouse дало мне возможность закрыть перенаправленное окно x2x, и я могу расфокусировать его, чтобы быстро вернуться к другим вещам без необходимости прерывать соединение.

0
ответ дан 15.04.2020, 20:22
  • 1
    -nomouse doesn' t, кажется, больше работают; поскольку меня под человечностью 16.04 x2x только печатает информацию об использовании, неважно, куда я поместил тот флаг. – The_Watcher 15.04.2020, 20:23

Теги

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