如何在 ubuntu 登录屏幕上获取 DISPLAY 变量?

如何在 ubuntu 登录屏幕上获取 DISPLAY 变量?

我有一个 bash 脚本来检查用户身份验证,它将 DISPLAY 变量设置为:

export DISPLAY=:0.0
xhost +local:

系统启动后,在登录屏幕上,该脚本失败并出现错误:

xhost:无法打开显示“:0.0”
:无法连接到 X 服务器:0.0

登录后,相同的脚本可以运行,但没有任何错误。
那么,如何正确设置 DISPLAY 变量,还是我遗漏了其他内容?

答案1

当系统首次启动时,有时显示不可用,直到其他后台脚本完成运行。我的解决方案是在显示相关命令之前添加一个 sleep 命令,以便系统有时间完成加载。例如:

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

“&&”将命令串联起来,这样它们就会一个接一个地运行,并且只有前一个命令成功执行后,&& 后面的命令才会运行。末尾的“&”允许命令在后台运行,以便系统可以完成加载其必要的组件。如果末尾没有“&”,系统将不会继续加载,直到整行执行完毕,这就违背了包含该sleep命令的目的。

答案2

这是我使用的等待用户登录的功能:

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

相关内容