Как набрать на экране входа lightdm из командной строки?
У меня есть компьютер с большими жесткими дисками, настроенный с зашифрованным домом. Так получилось, что на этом же компьютере работает главный медиацентр моей семьи. Каждый раз, когда мои дети хотят посмотреть фильм, я должен включить его, а затем физически подключить к нему клавиатуру и ввести пароль.
Я хотел бы иметь возможность сделать это удаленно.
Конечно, у меня также есть root-доступ к компьютеру.
Я не хочу создавать другое имя пользователя с автоматическим входом в систему, потому что большинство медиа-файлов зашифрованы, и я хочу, чтобы они оставались такими.
Нормальная комбинация export DISPLAY=0:
а также source discover_session_bus_addres.sh
а также xdotool type my_secret_password
который работает для ввода на экране блокировки не работает на lightm
,
3 ответа
Вот ответ, который работает под Ubuntu 16.04 с lightdm
:
- Сделай себя
root
чтобы получить доступ к Lightdm's.Xauthority
, который находится под/var/lib/lightdm/.Xauthority
, Либо скопируйте его куда-нибудь, где он будет доступен для чтения, и отбросьте права root, либо просто оставайтесь root. - задавать
XAUTHORITY
указать на этот файл (например,export XAUTHORITY=/var/lib/lightdm/.Xauthority
) - задавать
DISPLAY
на активный дисплей (export DISPLAY=:0
) 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'