Brilho OLED do Lenovo ThinkPad X1 Yoga

8

Estou usando o 16.04 no meu OLED X1 Yoga.

Eu não posso alterar o brilho da tela, parece estar no brilho máximo o tempo todo. Eu tentei:

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

Estou usando o GNOME Shell no Xorg.

Espero que seja útil uma lista de softwares e versões, diga-me nos comentários se precisar de mais.

gnome-shell 3.18.5-0ubuntu0.1
tlp         0.9-1~xenial
tp-smapi    0.41-1
    
por joar 14.09.2016 / 20:31

4 respostas

6

Não há luz de fundo com uma tela OLED. Então os métodos normais não funcionam. Ajuste o brilho da tela por meio de:

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

xrandr --output eDP1 --brightness 1  # no dimming

o número pode ser qualquer coisa entre 0 e 1

    
por P.Meyer 15.11.2016 / 10:50
9

Estou procurando uma maneira de executar o comando xrandr ao pressionar os botões de brilho. Eu criei eventos personalizados de acpi para isso (mais informações sobre isso aqui: link ). Isso ainda é um hack e não tem uma solução adequada, mas funciona para mim:

Eu criei três arquivos, / etc / acpi / events / yoga-brightness-up:

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

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

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

e finalmente /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 [ "" = 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"

que é strongmente inspirado no arquivo asus-keyboard-backlight.sh e as informações no link para o problema de acesso à raiz do xrandr .

Não se esqueça de reiniciar o acpi digitando

sudo service acpid reload

Espero que isso ajude; -)

    
por Ivo Blöchliger 20.12.2016 / 08:39
2

Controle suave de brilho

( Atualização: eu enviei o script de provisão para automatizar isso Github.)

Este script é baseado na solução alternativa por Ivo Blöchliger . Eu odiaria que meu laptop caro parecesse barato, então eu preciso de uma transição suave entre os valores de brilho para competir com meus colegas não-linux.

Isso é criado e testado no Linux Mint 18.3 e no Ubuntu 16.04.3 em um ThinkPad X1 Yoga (2ª geração) da Lenovo com painel OLED.

/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 (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 [ "" == "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 [ "" == "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

Remova os manipuladores de brilho anteriores e, finalmente, faça sudo service acpid reload

    
por Redsandro 28.11.2017 / 18:49
1

Eu fiz uma coisa semelhante ao acima no Ubuntu MATE 17.04:

  1. cat $MYDIR/scrbr.property = 0.5 (scrbr = brilho da tela)
  2. Criado um script scrbr.sh :

'' '

#!/bin/bash

ACTION=

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. Remapear as chaves WinKey + Up para scrbr.sh --up e o mesmo para --down .

  2. Lucro.

por vivri 12.10.2017 / 04:22