Após cada retomada do bloqueio de tela, suspensão ou suspensão, a tela do meu laptop fica muito escura. Se eu digitar Fn+ F6, a tela saltará para 100% de brilho instantaneamente. ( F5e F6são minhas teclas de controle de brilho.)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.6 LTS
Release: 20.04
Codename: focal
$ lspci -nnk | grep -EA3 VGA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:25b8] (rev a1)
Subsystem: Lenovo Device [17aa:22d8]
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
$ sudo lshw -c video
*-display
description: VGA compatible controller
product: NVIDIA Corporation
vendor: NVIDIA Corporation
physical id: 0
bus info: pci@0000:01:00.0
logical name: /dev/fb0
version: a1
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress vga_controller bus_master cap_list rom fb
configuration: depth=32 driver=nouveau latency=0 mode=1920x1080 visual=truecolor xres=1920 yres=1080
resources: iomemory:400-3ff iomemory:410-40f irq:199 memory:ab000000-abffffff memory:4000000000-40ffffffff memory:4100000000-4101ffffff ioport:3000(size=128) memory:ac080000-ac0fffff
$ sudo lshw | grep -i lenovo
product: 20YU002HUS (LENOVO_MT_20YU_BU_Think_FM_ThinkPad P17 Gen 2i)
vendor: LENOVO
configuration: administrator_password=disabled chassis=notebook family=ThinkPad P17 Gen 2i power-on_password=disabled sku=LENOVO_MT_20YU_BU_Think_FM_ThinkPad P17 Gen 2i uuid=4C043C28-3F2B-B211-A85C-940FFC06910B
vendor: LENOVO
vendor: LENOVO
Antes de bloquear a tela, suspender ou suspender:
$ cat /sys/class/backlight/nv_backlight/actual_brightness
100
Após bloquear a tela, suspender ou suspender:
$ cat /sys/class/backlight/nv_backlight/actual_brightness
33
Estou entrando no modo de bloqueio por qualquer um dos seguintes:
- Por inatividade
- Na linha de comando com:
xdg-screensaver lock
- No menu suspenso clicando em:
Lock
Estou entrando no modo de suspensão/suspensão por qualquer um dos seguintes:
- Na linha de comando com:
systemctl suspend
- No menu suspenso clicando em:
Power Off/Log Out
>Suspend
Observe que após retomar do bloqueio/suspensão/suspensão, o conteúdo de /sys/class/backlight/nv_backlight/actual_brightness
é 33
, não 100
.
Para obter brilho total novamente, só preciso digitar Fn+ F6uma vez. Acho isso um pouco estranho, porque normalmente, se o brilho for tão baixo, seriam necessários vários pressionamentos de tecla. Por exemplo, para ir de 30
para 100
, normalmente seriam sete pressionamentos de tecla.
Além disso, você notará na Settings/Power
janela que o nível de brilho indica que está em 100%, antes e depois de bloquear/hibernar/suspender.
Finalmente, você notará que tenho a configuração Dim Screen When Inactive
desabilitada.
Na minha tentativa de encontrar algum tipo de solução, instalei xbacklight
com a ideia de que poderia usá-la em um script para redefinir automaticamente meu brilho. Mas isso não teve efeito.
Também tentei os seguintes comandos, mas os níveis de brilho não mudam e não consigo gravar no arquivo. Talvez esta seja a abordagem errada.
$ sudo chmod 644 /sys/class/backlight/nv_backlight/actual_brightness
$ sudo tee /sys/class/backlight/nv_backlight/actual_brightness <<< 100
100
tee: /sys/class/backlight/nv_backlight/actual_brightness: Input/output error
$ sudo su
# echo 100 > /sys/class/backlight/nv_backlight/actual_brightness
bash: echo: write error: Input/output error
Por que esse sintoma está acontecendo e como posso corrigi-lo? Idealmente, eu preferiria não incorporar um script executado no login. Parece tratar o sintoma e não a causa.
ATUALIZAR
Tentei as duas soluções sugeridas a seguir, mas nenhuma funcionou.
Sugestão 1 – Serviço Systemd
Criar arquivo:
$ cat /etc/systemd/system/nvidia-backlight-sleep [Unit] Description=Fix Nvidia backlight after suspend Before=sleep.target StopWhenUnneeded=yes [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c "cat /sys/class/backlight/nv_backlight/actual_brightness > /run/previous_nv_backlight_brightness" ExecStop=/bin/bash -c "sleep 1; cat /run/previous_nv_backlight_brightness > /sys/class/backlight/nv_backlight/brightness" [Install] WantedBy=sleep.target
Recarregue os daemons do systemd:
sudo systemctl daemon-reload
Habilitar serviço:
sudo systemctl enable nvidia-backlight-sleep
Sugestão 2 - Crie script em/lib/systemd/system-sleep
Criar arquivo:
$ cat /lib/systemd/system-sleep/nvidia-backlight-sleep #!/bin/bash case $1 in post) sleep 1 echo 50 > /sys/class/backlight/nv_backlight/brightness ;; esac
Tornar executável:
sudo chmod 755 /lib/systemd/system-sleep/nvidia-backlight-sleep
Consegui resolver meu problema mudando do
nouveau
driver de código aberto para o proprietárionvidia-driver-535
. Isso pode ser instalado a partir da linha de comando ou por meio da GUI. Optei por instalá-lo através da GUI.Após a reinicialização, você pode ver que o driver Nvidia está em uso:
Além disso, junto com a instalação do driver, um utilitário chamado
nvidia-settings
é instalado. Execute isso comsudo nvidia-settings
e a seguinte janela será exibida:Outro aplicativo utilitário instalado com o driver Nvidia é o System Management Interface
nvidia-sma
:Finalmente, posso bloquear ou suspender meu laptop e as configurações de brilho da luz de fundo da tela são mantidas. Enquanto antes o valor era salvo em
/sys/class/backlight/nv_backlight/actual_brightness
, o novo driver salva o valor em/sys/class/backlight/nvidia_0/actual_brightness
:Concluindo, acho que há um bug no
nouveau
driver que está salvando e recuperando oactual_brightness
valor incorretamente. Por algum motivo, ele sempre retomava do bloqueio ou suspensão/suspensão com um valor de33
.Parece que o driver da Nvidia não está lembrando o valor da luz de fundo, mesmo que o GNOME o faça. Vamos contornar isso com um gancho para dormir:
Cole o seguinte em
/etc/systemd/system/nvidia-backlight-sleep-askubuntu-1505827-1004020.service
Correr
sudo systemctl daemon-reload
Correr
sudo systemctl enable nvidia-backlight-sleep-askubuntu-1505827-1004020.service
actual_brightness
não é gravável, então precisamos usar obrightness
arquivo. Você também pode ajustarsleep 1
caso não funcione ou se desejar que seja restaurado mais rapidamente. é responsável por salvar no desligamento/inicialização, enquanto o próprio driver da GPU é responsável por suspender/reiniciar./lib/systemd/system/[email protected]
Solução alternativa
Se isso não funcionar, podemos codificar mais coisas:
Desative e remova a outra solução
Cole o seguinte em
/lib/systemd/system-sleep/nvidia-backlight-sleep-askubuntu-1505827-1004020
sudo chmod 755 /lib/systemd/system-sleep/nvidia-backlight-sleep-askubuntu-1505827-1004020