ubuntu笔记本开机后屏幕亮度调整的头疼问题,另一种解决方案……完成率70%

从旧电脑上转移ubuntu数据至新电脑,已经使用了好几天了。新电脑机械革命Code01,CPU性能可以,用着十分舒服。只是这笔记本屏幕开机之后立马变成全亮度,让我觉得有些不太适应,每次开机后都要自行调整亮度,比较麻烦。

我希望笔记本开机之后能够保持关机前的亮度,于是上网去搜索解决方案。有使用应用包laptop-mode的,试之无用;还有一些通过配置/etc/rc.local文件来使开机后屏幕亮度变成指定亮度,也不符合我的想法(而且ubuntu1404之后使用systemd,放弃了rc.local)。

通过搜索得知ubuntu亮度调整配置文件位于/sys/class/backlight/xxxgpu/brightness(xxxgpu不同笔记本电脑可能不同),当将一定的数值写入该文件后,屏幕亮度便可变为该数值所对应的亮度。

通过cat /sys/class/backlight/xxxgpu/brightness,便可显示当前屏幕亮度数值。我将屏幕亮度调为最大值后,发现该命令显示值为255,也就是说我的笔记本屏幕亮度调节范围为0-255 。通过对这一文件的修改,可以直接控制屏幕亮度。下面直接上方案。

解决方案:

首先需要在关机的时候保存屏幕的亮度数值;紧接着开机时自动将该数值反馈到/sys/class/backlight/xxxcpu/brightness文件中,即可实现开机后屏幕亮度调整为关机前的数值。

我首先新建了/etc/backlight文件,用于储存亮度数值:

sudo touch /etc/backlight
sudo chmod 777 /etc/backlight

此文件需要放在不常动的文件夹中,以免误删(我放在/etc文件夹中),文件名也可以自取。chmod 777 是为了可以方便地更改其中的内容。

然后需要在关机时将/sys……/brightness中的数值保存到/etc/backlight文件中。网上搜索了一下关于关机时执行命令的方法,可知在ubuntu20的环境中,关机依靠systemd及其相关的文件,我们这里先写一个保存数值的脚本,再建立与systemd关机有关的服务以在关机时执行该脚本。

先在/usr/bin新建一个脚本backlight_save.sh

sudo touch /usr/bin/backlight_save.sh

在其中输入以下内容:

#!/bin/sh
cat /sys/class/backlight/xxxgpu/brightness > /etc/backlight

这一脚本将当前屏幕亮度数值保存在/etc/backlight中。然后我们使它可以被执行:

sudo chmod +x /usr/bin/backlight_save.sh

接着我们写一个关机时自动运行的服务(在/lib/systemd/system新建一个.service文件):

sudo touch /lib/systemd/system/backlight_shut.service

在此文件中编入以下内容:

[Unit]
Description=关机时保存屏幕亮度信息
After=display-manager.service
Before=systemd-poweroff.service systemd-reboot.service systemd-halt.service
DefaultDependencies=no

[Service]
ExecStart=/usr/bin/backlight_save.sh
Type=forking

[Install]
WantedBy=poweroff.target
WantedBy=reboot.target
WantedBy=halt.target

这个文件中的编制方法源于百度,可以搜ubuntu关机时执行程序。

接着将此服务软链接到want的三个文件夹中(此操作与上面的服务相关,具体细节请查阅systemd相关文档)

sudo ln -s /lib/systemd/system/backlight_shut.service /lib/systemd/system/poweroff.target.wants
sudo ln -s /lib/systemd/system/backlight_shut.service /lib/systemd/system/reboot.target.wants
sudo ln -s /lib/systemd/system/backlight_shut.service /lib/systemd/system/halt.target.wants

然后我们直接重启单元块:

sudo systemctl daemon-reload

关机保存亮度值模块到此完成。

开机时加载亮度数据的操作目前没有达到完全完美的效果,原因之后再说。

先写一个将/etc/backlight中数值加载到/sys/class/backlight/xxxcpu/brightness中的可执行脚本:

sudo touch /usr/bin/backlight_load.sh
sudo chmod +x /usr/bin/backlight_load.sh

在此脚本中添加以下内容:

#!/bin/sh
cat /etc/backlight > /sys/class/backlight/xxxgpu/brightness

此脚本将/etc/backlight中保存的数值直接加载到屏幕亮度配置文件中,可以瞬间调整亮度。对了,还需要:

sudo chmod 777 /sys/class/backlight/xxxgpu/brightness

否则写入亮度数值的操作可能没有权限。

现在只需要在开机时运行backlight_load.sh便可以还原屏幕亮度了。目前暂时的方法:ubuntu启动应用程序(ubuntu自带)中添加启动程序

 现在开机登陆后便可以实现亮度改变的操作。

有点问题的地方

其实我原本想在显示开机动画的时候或者刚开始加载系统时就实现亮度更改,其实就是添加一个开机服务,让系统在开机的时候自动运行backlight_load.sh(就像关机时运行backlight_shut.sh一样)。但是并没有成功。系统开机后屏幕亮度依然最大,但查看/sys……/brightness文件亮度却只有5,让我不禁怀疑什么地方除了问题,难道是服务没运行?

在亮度加载脚本backlight_load.sh中我加入了如下命令:

echo 'ok' > ~/temp

如果backlight_load.sh正常运行,那~/temp文件中应该会有ok字样,重新开机后,的确发现temp文件中有ok,说明服务的确是运行了的,那为什么会调节失败呢?

我查看了系统日志/var/log/syslog,翻找了很久很久,终于发现了关于服务backlight执行失败的命令。backlight原是系统自带的一个单元,本应有使屏幕亮度调节至关机前水平的功能,但我的笔记本电脑该单元发生故障,故不能实现开机后亮度自动调节的功能。使用sudo systemctl --failed,我发现

~$ sudo systemctl --failed
  UNIT                                            LOAD   ACTIVE SUB    DESCRIPT>
● dmesg.service                                   loaded failed failed Save ini>
● systemd-backlight@backlight:acpi_video0.service loaded failed failed Load/Sav>
● systemd-backlight@backlight:amdgpu_bl0.service  loaded failed failed Load/Sav>

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

这个单元模块的确失效。具体怎么修复,现在尚不清楚。

----------------------------分割线--------------------------------

===============2022.2.15=================

目前找到了我的问题的原因!

grub启动时,内核启动参数中的 $vt_handoff去掉,就能够实现开机时恢复屏幕亮度了,上网去查询过,还不知道是什么原理

我的电脑基于UEFI启动,加上$vt_handoff后可以很顺畅地过渡到动画,去掉之后只是多显示一点点开机代码内容,影响不大

在/etc/default/grub中,将quiet splash改为如下形式

GRUB_CMDLINE_LINUX_DEFAULT=""

GRUB_CMDLINE_LINUX="quiet splash"

然后执行sudo update-grub,即可去掉grub.cfg中的$vt_handoff参数选项

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值