我编写了一个 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