使用 Upstart 和脚本进行 Gamma 校正

使用 Upstart 和脚本进行 Gamma 校正

我编写了一个 Upstart 作业,可以根据显示亮度的变化自动改变显示伽玛:

start on (backlight-device-changed)
exec /usr/bin/gammach  

这是“gammach”:

#! /bin/bash
Br=`cat /sys/class/backlight/acpi_video0/actual_brightness` # Display brightness
Gm=.$((((Br+76)%100)))                      # Corrected gamma according to brightness
xrandr --output LVDS --gamma $Gm:$Gm:$Gm  

但每次我改变亮度时,日志文件中都会收到此错误:

Can't open display

我尝试过 xgamma,但收到类似的错误。
任何帮助都感激不尽。谢谢。

答案1

您使用的程序需要访问 X 服务器,但不知道应该使用哪个 X 显示器。

在大多数情况下,您可以通过设置固定的显示名称来解决此问题:0.0,该显示名称通常是第一个显示器的名称,如果只有一个显示器正在运行,则为该显示器的名称。

例如,在脚本的开始处,您可以使用:

export DISPLAY=:0.0

一般来说,你可以多显示器,例如在多个控制台上运行多个 X 服务器,或者嵌套X 服务器,例如 Xnest 或 Xvnc。

另外,您还可以一个 X 服务器仅运行,具有不同的显示名称比:0.0,像:10.0

在这些情况下,您需要找到一种方法来向您的脚本指定要使用哪个 DISPLAY。


为了在日志中获得一些有用的输出,您可以添加:

pgrep -fa /usr/bin/X

显示在运行 upstart 作业时是否有一个或多个 X 服务器正在运行。命令行还可以显示它们运行的​​显示器。
并且

echo DISPLAY: "\"$DISPLAY\""

将 DISPLAY 变量写入日志。

答案2

我终于找到了答案。
显然,这是具有访问 Xserver 等内容的权限和授权的。我的脚本
版本xgamma运行良好:

#! /bin/bash
export XAUTHORITY=/home/<username>/.Xauthority  # This give permission to access Xserver
Br=`cat /sys/class/backlight/acpi_video0/actual_brightness` # Display brightness
Gm=.$((((Br+76)%100)))                      # Corrected gamma according to brightness
xgamma -d :0 -gamma $Gm

相关内容