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