联想 ThinkPad X1 Yoga OLED 亮度

joa*_*oar 13 acpi thinkpad lenovo intel-graphics brightness

我在 X1 Yoga 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
Run Code Online (Sandbox Code Playgroud)

P.M*_*yer 13

OLED 屏幕没有背光。所以正常的方法是行不通的。通过以下方式调整屏幕亮度:

xrandr --output eDP1 --brightness .5  # dim to half 

xrandr --output eDP1 --brightness 1  # no dimming
Run Code Online (Sandbox Code Playgroud)

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

  • 我刚刚安装了一个新的 Linux 发行版,不得不查找我自己的答案,所以我找到了您的评论。如果您的设备名称不同,则只需输入 xrandr 即可。除其他外,它将输出设备名称。我的现在被称为:例如 eDP-1。 (3认同)

小智 11

我一直在寻找一种在按下亮度按钮时运行 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
Run Code Online (Sandbox Code Playgroud)

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

event=video/brightnessdown BRTDN 00000087
action=/etc/acpi/yoga-brightness.sh down
Run Code Online (Sandbox Code Playgroud)

最后是/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"
Run Code Online (Sandbox Code Playgroud)

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

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

sudo service acpid reload
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助 ;-)

  • 我让它工作,但必须指定“eDP1”而不是“eDP-1”。另外,值得一提的是,您需要执行“chmod a+rx /etc/acpi/yoga-brightness.sh”。谢谢! (2认同)

Red*_*dro 5

平滑的亮度控制

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

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

这是在带有 OLED 面板的 Lenovo 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
Run Code Online (Sandbox Code Playgroud)

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

event=video/brightnessdown BRTDN 00000087
action=/etc/acpi/oled-brightness.sh down
Run Code Online (Sandbox Code Playgroud)

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

#!/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
Run Code Online (Sandbox Code Playgroud)

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