Como alternar entre as opções em '/ sys / class / backlight' para resolver o problema de brilho?

2

SO: Ubuntu - 18.04 LTS

Eu tenho 2 links simbólicos no diretório /sys/class/backlight/ .

acpi_video0 -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/backlight/acpi_video0/
nv_backlight -> ../../devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card0/card0-LVDS-1/nv_backlight/

As teclas de atalho de brilho alteram o valor de acpi_video0/brightness . Mas isso não altera o brilho da tela.

Mas, alterar manualmente o valor de nv_backlight/brightness realmente altera o brilho da tela.

Portanto, vincular as teclas de atalho a nv_backlight em vez de acpi_video0 resolverá meu problema, mas não sei como fazê-lo.

Editar: A barra de progresso do controle deslizante pop-up aparece na tela na operação das teclas Fn para brilho (teclas de atalho).

Editar:

  1. Entrada:

    cat /sys/class/backlight/nv_backlight/max_brightness
    

    Saída:

    100
    
  2. Entrada:

    cat /sys/class/backlight/nv_backlight/actual_brightness
    

    Saída (este valor muda automaticamente para o mesmo valor, eu dei manualmente em /sys/class/backlight/nv_backlight/brightness ):

    10
    
  3. Entrada:

    cat /sys/class/backlight/acpi_video0/max_brightness
    

    Saída:

    15
    
por boobalan 11.06.2018 / 15:44

1 resposta

2

Script de bash redirect-brightness

Seu problema é que as teclas de função para aumentar / diminuir o brilho estão atualizando /sys/class/backlight/acpi_video0/brightness em vez de /sys/class/backlight/nv_backlight/brightness

A solicitação original era interceptar as teclas de função e usá-las para controlar o driver nv_backlight . O problema com isso é:

  • Tricky udev scripts
  • Nenhum controle deslizante de notificação pop-up exibe o brilho sem o complicado script Python.

A solução é usar inotify para monitorar alterações em acpi_video0 . Em seguida, calcule a porcentagem de brilho e aplique a mesma porcentagem a nv_backlight .

No script abaixo, você precisa alterar WatchDriver para /sys/class/backlight/acpi_video0/brightness e PatchDriver to / sys / class / backlight / nv_backlight / brightness '

Coloque o script em /usr/local/bin e torne-o executável usando:

chmod a+x /usr/local/bin/redirect-brightness

Primeiro, execute o script na linha de comando usando

redirect-brightness -l

Se houver um problema, verifique o arquivo de log usando:

cat /tmp/redirect-brightness.log

Se tudo funcionar, adicione redirect-brightness aos seus aplicativos de inicialização.

redirect-brightness script bash

#!/bin/bash

# NAME: redirect-brightness
# PATH: /usr/local/bin
# DESC: Redirect to correct driver when Ubuntu is adjusting the wrong
#       /sys/class/DRIVER_NAME/brightness

# DATE: June 13, 2018. Modified June 14, 2018.

# NOTE: Written for Ubuntu question:
#       https://sobrelinux.info/questions/267151/how-to-switch-between-options-in-sys-class-backlight-to-solve-brightness-prob"/sys/class/backlight/intel_backlight"
PatchDriver="/sys/class/backlight/intel_backlight"

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    echo >&2 "Root access required. Use: 'sudo redirect-brightness'"
    exit 1
fi

# inotifywait required
type inotifywait >/dev/null 2>&1 || \
    { echo >&2 "'inotifywait' required but it's not installed.  Aborting."; \
      echo >&2 "Use 'sudo apt install inotify-tools' to install it.'"; \
      exit 1; }

# Was right watch driver directory name setup correctly?
if [[ ! -d $WatchDriver ]]; then
    echo >&2 "Watch directory: '$WatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Was right patch driver directory name setup correctly?
if [[ ! -d $PatchDriver ]]; then
    echo >&2 "Redirect to directory: '$PatchDriver'"; \
    echo >&2 "does not exist. Did you spell it correctly? Aborting.'"; \
    exit 1;
fi

# Get maximum brightness values
WatchMax=$(cat $WatchDriver/max_brightness)
PatchMax=$(cat $PatchDriver/max_brightness)

# PARM: 1="-l" or "--log-file" then write each step to log file.
fLogFile=false
if [[ $1 == "-l" ]] || [[ $1 == "--log-file" ]]; then
    fLogFile=true
    LogFile=/tmp/redirect-brightness.log
    echo redirect-brightness LOG FILE > $LogFile
    echo WatchMax: $WatchMax PatchMax: $PatchMax >> $LogFile
fi

SetBrightness () {
    # Calculate watch current percentage
    WatchAct=$(cat $WatchDriver/actual_brightness)
    WatchPer=$(( WatchAct * 100 / WatchMax ))
    [[ $fLogFile == true ]] && echo WatchAct: $WatchAct WatchPer: $WatchPer >> $LogFile
    # Reverse engineer patch brightness to set
    PatchAct=$(( PatchMax * WatchPer / 100 ))
    echo $PatchAct | sudo tee $PatchDriver/brightness
    [[ $fLogFile == true ]] && echo PatchAct: $PatchAct >> $LogFile
}

# When machine boots, set brightness to last saved value
SetBrightness

# Wait forever for user to press Fn keys adjusting brightness up/down.
while (true); do
    inotifywait --event modify $WatchDriver/actual_brightness
    [[ $fLogFile == true ]] && \
        echo "Processing modify event in $WatchDriver/actual_brightness" >> $LogFile
    SetBrightness
done

Resposta original 11 de junho de 2018.

Resposta em andamento no trabalho

Existem muitos usuários da nVidia com problemas semelhantes no Ubuntu 18.04:

Antes de escrever um script

Eu posso escrever um script para imitar alterações em / acpi_video e preencher / nv_backlight, mas antes de tentar isso:

  • Edite /etc/default/grub .
  • Localizar quiet splash
  • Adicionar por trás do splash: acpi_backlight=vendor
  • Salve o arquivo
  • Executar sudo update-grub

De acordo com esta resposta, deve funcionar para você: Xubuntu 18.04: fazer as teclas de brilho do Fn funcionarem com / sys / class / backlight / nv_backlight /

Wayland

O brilho não funciona no Wayland. Certifique-se de que você não está usando. Veja: O brilho da tela do laptop não pode ser ajustado com os botões nem com o controle deslizante. Editar

    
por WinEunuuchs2Unix 12.06.2018 / 02:19