联想ThinkPad X1瑜伽OLED亮度

我在X1瑜伽OLED上运行16.04。

我根本无法改变屏幕的亮度,似乎始终处于最大亮度。 我试过了:

  • Fn + F5 / F6
  • xbacklight -set 50 (和100,和0,和20,…)/ xbacklight -dec 10

我在Xorg中使用GNOME Shell。

希望有用的软件和版本列表,如果您需要更多,请在评论中告诉我。

 gnome-shell 3.18.5-0ubuntu0.1 tlp 0.9-1~xenial tp-smapi 0.41-1 

OLED屏幕没有背光。 所以常规方法不起作用。 通过以下方式调整屏幕亮度:

 xrandr --output eDP1 --brightness .5 # dim to half xrandr --output eDP1 --brightness 1 # no dimming 

数字可以是0到1之间的任何数字

我一直在寻找一种在按下亮度按钮时运行xrandr命令的方法。 我为此创建了自定义acpi事件(更多信息请访问: https : //help.ubuntu.com/community/LaptopSpecialKeys )。 这仍然是一个黑客,没有适当的解决方案,但它适用于我:

我创建了三个文件,/ etc / acpi / events / yoga-brightness-up:

 event=video/brightnessup BRTUP 00000086 action=/etc/acpi/yoga-brightness.sh up 

和/ etc / acpi / events / yoga-brightness-down:

 event=video/brightnessdown BRTDN 00000087 action=/etc/acpi/yoga-brightness.sh down 

最后是/etc/acpi/yoga-brightness.sh:

 #!/bin/sh # Where the backlight brightness is stored BR_DIR="/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/" test -d "$BR_DIR" || exit 0 MIN=0 MAX=$(cat "$BR_DIR/max_brightness") VAL=$(cat "$BR_DIR/brightness") if [ "$1" = down ]; then VAL=$((VAL-71)) else VAL=$((VAL+71)) fi if [ "$VAL" -lt $MIN ]; then VAL=$MIN elif [ "$VAL" -gt $MAX ]; then VAL=$MAX fi PERCENT=`echo "$VAL / $MAX" | bc -l` export XAUTHORITY=/home/ivo/.Xauthority # CHANGE "ivo" TO YOUR USER export DISPLAY=:0.0 echo "xrandr --output eDP-1 --brightness $PERCENT" > /tmp/yoga-brightness.log xrandr --output eDP-1 --brightness $PERCENT echo $VAL > "$BR_DIR/brightness" 

受到文件asus-keyboard-backlight.sh和https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/660901上xrandr根的启发 -访问问题。

不要忘记通过键入来重新启动acpi

 sudo service acpid reload 

我希望这有帮助 ;-)

平滑亮度控制

更新:我上传了配置脚本以将其自动化到Github。)

此脚本基于IvoBlöchliger的解决方法。 我讨厌昂贵的笔记本电脑看起来便宜,所以我需要在亮度值之间平滑过渡以与我的非Linux同事竞争。

这是在带有OLED面板的联想ThinkPad X1 Yoga(第二代)上的Linux Mint 18.3和Ubuntu 16.04.3上创建和测试的。

/etc/acpi/events/oled-brightness-up (644):

 event=video/brightnessup BRTUP 00000086 action=/etc/acpi/oled-brightness.sh up 

/etc/acpi/events/oled-brightness-down (644):

 event=video/brightnessdown BRTDN 00000087 action=/etc/acpi/oled-brightness.sh down 

/etc/acpi/oled-brightness.sh ):

 #!/bin/bash # Smooth brightness control # Change "redsandro" in the line below to your username export XAUTHORITY=/home/redsandro/.Xauthority export DISPLAY=:0.0 OLED_BR=`xrandr --verbose | grep -i brightness | cut -f2 -d ' '` CURR=`LC_ALL=C /usr/bin/printf "%.*f" 1 $OLED_BR` MIN=0 MAX=1.2 if [ "$1" == "up" ]; then VAL=`echo "scale=1; $CURR+0.1" | bc` else VAL=`echo "scale=1; $CURR-0.1" | bc` fi if (( `echo "$VAL < $MIN" | bc -l` )); then VAL=$MIN elif (( `echo "$VAL > $MAX" | bc -l` )); then VAL=$MAX else if [ "$1" == "up" ]; then for I in {1..10..1}; do xrandr --output eDP1 --brightness `echo "scale=2; $I/100+$CURR" | bc` 2>&1 >/dev/null | logger -t oled-brightness; done else for I in {1..10..1}; do xrandr --output eDP1 --brightness `echo "scale=2; $CURR-$I/100" | bc` 2>&1 >/dev/null | logger -t oled-brightness; done fi fi # Set Intel backlight to fake value # to sync OSD brightness indicator to actual brightness INTEL_PANEL="/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/" if [ -d "$INTEL_PANEL" ]; then PERCENT=`echo "scale=4; $VAL/$MAX" | bc -l` INTEL_MAX=$(cat "$INTEL_PANEL/max_brightness") INTEL_BRIGHTNESS=`echo "scale=4; $PERCENT*$INTEL_MAX" | bc -l` INTEL_BRIGHTNESS=`LC_ALL=C /usr/bin/printf "%.*f" 0 $INTEL_BRIGHTNESS` echo $INTEL_BRIGHTNESS > "$INTEL_PANEL/brightness" fi 

删除任何以前的亮度处理程序,最后,执行sudo service acpid reload

我在Ubuntu MATE 17.04中做了类似的事情:

  1. cat $MYDIR/scrbr.property = 0.5 (scrbr =屏幕亮度)
  2. 创建了一个脚本scrbr.sh

“`

 #!/bin/bash ACTION=$1 PROP_FILE=$MYDIR/scrbr.property BRIGHT=$(cat $PROP_FILE) if [[ "$ACTION" == "--up" ]]; then SYM="+" elif [[ "$ACTION" == "--down" ]]; then SYM="-" fi BRIGHT=$(echo "$BRIGHT $SYM 0.1" | bc) # Not less than 0 [[ $BRIGHT == -* ]] && BRIGHT=0 echo $BRIGHT > $PROP_FILE xrandr --output eDP-1 --brightness $BRIGHT 
  1. 重新映射密钥WinKey + Upscrbr.sh --up ,同样用于--down

  2. 利润。