У меня есть сценарий удара для проверки аутентификации пользователя, которая устанавливает переменную ДИСПЛЕЯ как:
export DISPLAY=:0.0
xhost +local:
После системной начальной загрузки, в экране входа в систему, этот сценарий сбои и ошибка:
xhost: не мог открыть дисплей ":0.0"
: не может соединиться с X-сервером:0.0
После входа в систему тот же сценарий работает, но без любой ошибки.
Так, как установить переменную ДИСПЛЕЯ правильно, или я пропускаю что-то еще?
Когда система сначала загружается, дисплей иногда не доступен, пока другие фоновые сценарии не закончили работать. Мое решение состоит в том, чтобы добавить команду сна перед Вашими связанными с дисплеем командами для предоставления системного времени, чтобы закончить загружаться. Что-то как:
sleep 5 && export DISPLAY=:0.0 && xhost +local &
Цепочка '&&, которую только выполнят команды так, чтобы они работали один за другим, и команда после &&, если предыдущая команда была успешна. '&' в конце позволяет команде работать в фоновом режиме так, чтобы система могла закончить загружать свои необходимые компоненты. Без '&' в конце, система не продолжит загружаться, пока вся строка не закончила выполняться, который побеждает цель включать sleep
команда.
Вот функция, которую я использую, который ожидает пользователя для входа в систему:
SpamLength=1
WaitForSignOn () {
# eyesome daemon is loaded during boot. The user name is required
# for xrandr external monitor brightness and gamma control. We must
# wait until user signs on to get .Xauthority file settings.
SpamOn=10 # Causes 10 iterations of 2 second sleep
SpamContext="Login"
TotalWait=0
[[ ! -f "$CurrentBrightnessFilename" ]] && rm -f \
"$CurrentBrightnessFilename"
# Wait for user to sign on then get Xserver access for xrandr calls
UserName=""
while [[ $UserName == "" ]]; do
sleep "$SpamLength"
TotalWait=$(( TotalWait + SpamLength ))
# Find UserName currently logged in.
UserName="$(who -u | grep -F '(:0)' | head -n 1 | awk '{print $1}')"
done
log "Waited $TotalWait seconds for $UserName to login."
xhost local:root
export XAUTHORITY="/home/$UserName/.Xauthority"
if [[ "$fUseDbusMonitor" == true ]] ; then
echo "$UserName" > "$EyesomeUser"
sync -d "$EyesomeUser" # Flush buffer immediately
fi
} # WaitForSignOn