Как набрать на экране входа lightdm из командной строки?

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

Я хотел бы иметь возможность сделать это удаленно.

Конечно, у меня также есть root-доступ к компьютеру.

Я не хочу создавать другое имя пользователя с автоматическим входом в систему, потому что большинство медиа-файлов зашифрованы, и я хочу, чтобы они оставались такими.

Нормальная комбинация export DISPLAY=0: а также source discover_session_bus_addres.sh а также xdotool type my_secret_password который работает для ввода на экране блокировки не работает на lightm,

3 ответа

Решение

Вот ответ, который работает под Ubuntu 16.04 с lightdm:

  1. Сделай себя root чтобы получить доступ к Lightdm's .Xauthority, который находится под /var/lib/lightdm/.Xauthority, Либо скопируйте его куда-нибудь, где он будет доступен для чтения, и отбросьте права root, либо просто оставайтесь root.
  2. задавать XAUTHORITY указать на этот файл (например, export XAUTHORITY=/var/lib/lightdm/.Xauthority)
  3. задавать DISPLAY на активный дисплей (export DISPLAY=:0)
  4. xdotool должен работать сейчас. Пытаться

    xdotool type "My super secret password"  
    xdotool key Return
    

Вот обходной путь, который я использую. Это уродливо и грубо, но этот подход должен работать и в Wayland и GDM (Ubuntu 17.10), если опция автоматического входа работает вообще.

#!/bin/bash

# NAME: lightdm-auto-login

main() {
    # If the file '/etc/lightdm/lightdm.conf' exists create a backup copy
    [[ -f /etc/lightdm/lightdm.conf ]] && mv /etc/lightdm/lightdm.conf{,.bak}

    # Create autologin configuration for the current $USER = $1
    echo -e "[Seat:*]\nautologin-user=$1" > /etc/lightdm/lightdm.conf

    # Restart 'lightdm' while autologin option is enabled
    systemctl restart lightdm.service

    # Wait for a moment to complete the login process and remove the conf file
    sleep 30 && rm /etc/lightdm/lightdm.conf

    # Restore the backup if exists
    [[ -f /etc/lightdm/lightdm.conf.bak ]] && mv /etc/lightdm/lightdm.conf{.bak,}
}

# Execute the 'main()' function with root privileges in the background 'sudo -b'
# Pass the curent $USER as arg (https://unix.stackexchange.com/a/269080/201297)
sudo -b bash -c "$(declare -f main); main $USER"
  • Сценарий должен быть выполнен как обычный пользователь (принадлежит группе sudoers).

  • Скрипт создаст резервную копию файла /etc/lightdm/lightdm.conf, Затем он сгенерирует новый файл конфигурации с опцией автоматического входа, включенной для текущего пользователя. На данный момент lightdm будет перезапущен, и пользователь будет авторизован с помощью опции автоматического входа. Наконец, пользовательская конфигурация будет удалена, а исходное состояние файла конфигурации будет восстановлено.

  • Если GDM используется: перезапускаемая служба gdm3.service и файл конфигурации, который должен быть изменен /etc/gdm3/custom.conf,

Это прекрасно работает для меня (из SSH, с Lightdm):

$ XAUTHORITY=/var/lib/lightdm/.Xauthority DISPLAY=:0.0 sudo sh -c 'xdotool type "My Password" && xdotool key Return'
Другие вопросы по тегам