как добраться, переменная ДИСПЛЕЯ в человечности входят в экран?

У меня есть сценарий удара для проверки аутентификации пользователя, которая устанавливает переменную ДИСПЛЕЯ как:

export DISPLAY=:0.0
xhost +local:

После системной начальной загрузки, в экране входа в систему, этот сценарий сбои и ошибка:

xhost: не мог открыть дисплей ":0.0"
: не может соединиться с X-сервером:0.0

После входа в систему тот же сценарий работает, но без любой ошибки.
Так, как установить переменную ДИСПЛЕЯ правильно, или я пропускаю что-то еще?

1
задан 7 April 2019 в 21:00

2 ответа

Когда система сначала загружается, дисплей иногда не доступен, пока другие фоновые сценарии не закончили работать. Мое решение состоит в том, чтобы добавить команду сна перед Вашими связанными с дисплеем командами для предоставления системного времени, чтобы закончить загружаться. Что-то как:

sleep 5 && export DISPLAY=:0.0 && xhost +local &

Цепочка '&&, которую только выполнят команды так, чтобы они работали один за другим, и команда после &&, если предыдущая команда была успешна. '&' в конце позволяет команде работать в фоновом режиме так, чтобы система могла закончить загружать свои необходимые компоненты. Без '&' в конце, система не продолжит загружаться, пока вся строка не закончила выполняться, который побеждает цель включать sleep команда.

1
ответ дан 7 December 2019 в 15:05

Вот функция, которую я использую, который ожидает пользователя для входа в систему:

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
0
ответ дан 7 December 2019 в 15:05

Другие вопросы по тегам:

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