我正在尝试调高/调低键盘按键的亮度。
通过acpi_listen
按下调高/调低亮度,我得到了以下结果:
video DD03 00000087 00000000
video DD03 00000086 00000000
跑步showkey
:
keycode 225 press
keycode 225 release
keycode 224 press
keycode 224 release
我已经设置了 compizconfi
答案1
有很多方法可以使用软件调整显示器、笔记本电脑或集成面板(如 iMac)的屏幕背光,但根据硬件和型号的不同,有时只有一些选项可用。
例子:
- 亮度由供应商指定的热键控制。并且没有操作系统调整亮度的界面。
- 亮度由操作系统控制:
- 亮度可以通过 ACPI 控制
- 亮度可以通过图形驱动程序控制。
Wiki 上有一篇出色的文章,总结了实现此目的的可能方法: https://wiki.archlinux.org/index.php/Backlight
但是ACPI
,xbacklight
如果xcalib
无法调整亮度级别,我们可以使用setpci
命令直接操作显卡。这是我们将在本教程中使用的方法。
笔记:仅当上述程序无法完成您想要完成的任务并且不是首选方法时才应使用此方法。然而,在许多情况下,这是唯一可以完成任务的方法。
我们要做的是将setpci
命令绑定到键盘上的组合键,xbindkeys,
这样当按下某些键时,亮度就会调高或调低。
好的,我们开始吧!
- 首先我们需要确定设备地址您的显卡,在大多数情况下,它会是,
00:02.0
但并非总是如此,所以这里是如何检查的。
打开终端窗口并在命令提示符下输入以下内容:
lspci |grep -i vga
这将返回一行显示诸如供应商、型号、版本等信息...感兴趣的部分位于最开始,应如下所示:
00:02.0
笔记: 输出可能会有所不同
这是设备地址您的显卡,我们将使用它和setpci
命令来控制您的亮度级别。所以写下来!
- 接下来我们需要下载
xbindkeys
。这个程序会将命令实际绑定setpci
到键盘上的按键组合上。
打开终端窗口并在命令提示符下输入以下内容:
sudo apt-get install xbindkeys
- 现在我们要在我们的家
xbindkeys
启动时将使用的目录 。
打开一个终端窗口(如果还没有),然后切换到家目录。在命令提示符下键入以下命令:
touch .xbindkeysrc
这将创建一个文件,我们将在其中输入配置,xbindkeys
每次启动时都会读取该文件
touch .xbindkeys.noauto
这只是创建一个空白文件,但它至关重要,因为当它存在时,它会xbindkeys
阻止在启动时自动启动。虽然我们想xbindkeys
自动启动,但我们想自己控制它,因为 Xserver 在启动过程中过早地启动它。这导致我们所做的配置有时无法正常运行。我们将添加一个xb_start.sh
名为启动应用程序本教程后面将介绍启动过程。
让我们来看看各个键的作用是什么!!
为了节省时间,我将自动假设X服务器已经识别了键盘上用来改变亮度的按键,只是按下这些按键时它不会做任何事情。在我的情况下是Fn
+Up Arrow
或Down Arrow
但我们不能只把这些词放在Fn
我们Up Arrow
的Down Arrow
配置文件中,我们必须找出键码是。
在大多数情况下,它们将会密钥代码 232调低亮度,然后密钥代码 233来调节亮度,但我们最好确定一下。
打开终端窗口并在命令提示符下输入以下内容:
xmodmap -pke |grep -i xf86monbrightness
这应该返回两行类似于以下内容的内容:
keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
我们关心的是以下数字关键代码。在本例中是232
和233
。 把所有数字都写下来,因为我们稍后会用到它们。
让我们开始将它们整合在一起吧!!
- 现在,我们将使用收集并记下的信息,向
.xbindkeysrc
你之前在家目录。
使用您最喜欢的文本编辑器打开该.xbindkeysrc
文件,然后复制并粘贴或键入以下行,然后保存:
笔记: 如果232
和233
你之前记下的键码不一样,请在此文件中更改它们
"/usr/local/bin/blevel_down.sh"
c:232
"/usr/local/bin/blevel_up.sh"
c:233
我们在这里做的是告诉我们在按下键盘上调节亮度的按键组合时xbindkeys
运行blevel_down.sh
脚本。在我的情况下是Fn + Down Arrow
。在下一行中,我们告诉它运行blevel_up.sh
forFn + Up Arrow
笔记: 按键组合各不相同,请检查键盘按键上的图片以确定哪些适合您。
让我们编写脚本吧!
blevel_up.sh
和脚本blevel_down.sh
是通过向命令传递参数来逐步调高或调低亮度而创建的setpci
。因此,当您按下执行调整的任何键时,亮度每次都会稍微调高或调低一点。 用于xb_start.sh
在xbindkeys
计算机启动时启动,但允许在启动之前完成其他过程。
笔记:如果您之前确定的显卡设备地址与我们之前确定的不同blevel_up.sh
,则blevel_down.sh
需要进行相应修改。它们很可能应该相同。
- 我们将
blevel_up.sh
首先创建:
打开您最喜欢的文本编辑器,然后将以下内容复制并粘贴或输入到文件中,然后将其保存为主目录中的 blevel_up.sh
#!/bin/bash
if [ ! -f /home/$USER/.blevel ]; then
touch /home/$USER/.blevel
echo "FF" > /home/$USER/.blevel
state="FF"
else
state=`cat /home/$USER/.blevel`
fi
new_state=$(echo "$[0x$state+0x10]")
if [ "$new_state" -gt 255 ]; then
sudo setpci -s 00:02.0 F4.B=FF
else
state=$(echo "obase=16; $new_state" | bc)
sudo setpci -s 00:02.0 F4.B=$state
echo $state > /home/$USER/.blevel
fi
- 现在我们将创建
blevel_down.sh
脚本:
打开您最喜欢的文本编辑器,然后将以下内容复制并粘贴或输入到文件中,然后将其保存为主目录中的 blevel_down.sh
#!/bin/bash
if [ ! -f /home/$USER/.blevel ]; then
touch /home/$USER/.blevel
echo "FF" > /home/$USER/.blevel
state="FF"
else
state=`cat /home/$USER/.blevel`
fi
new_state=$(echo "$[0x$state-0x10]")
if [ "$new_state" -lt 15 ]; then
sudo setpci -s 00:02.0 F4.B=0F
else
state=$(echo "obase=16; $new_state" | bc)
sudo setpci -s 00:02.0 F4.B=$state
echo $state > /home/$USER/.blevel
fi
- 现在我们将创建
xb_start.sh
脚本:
打开您最喜欢的文本编辑器,然后将以下内容复制并粘贴或输入到文件中,然后将其保存为 xb_start.sh 在你的主目录中
#!/bin/bash
sleep 10
/usr/bin/xbindkeys &
让我们使脚本全球化!!
- 现在我们要做的是将我们刚刚创建的三个脚本从家目录
/usr/local/bin
并设置权限,以便无论谁登录机器都可以执行它们。
打开终端窗口并在命令提示符下输入以下内容:
sudo mv blevel_up.sh blevel_down.sh xb_start.sh /usr/local/bin
sudo chmod 755 /usr/local/bin/blevel_up.sh
sudo chmod 755 /usr/local/bin/blevel_down.sh
sudo chmod 755 /usr/local/bin/xb_start.sh
现在,setpci
无需每次输入密码即可运行
由于这setpci
会更改某些系统文件,因此普通用户必须在命令setpci
前加上sudo
eachtime 前缀才能运行该命令。这样每次调整屏幕亮度时都需要输入密码。如果我们在文件中输入特定条目,/etc/sudoers
我们就可以解决这个问题。
打开终端窗口并在命令提示符下输入以下内容:
sudo visudo
这将打开文件/etc/sudoers
,以便我们可以进行所需的更改。
一直滚动到文件底部并输入以下内容:
ALL ALL = NOPASSWD:/usr/bin/setpci
笔记: 文件区分大小写,因此请在此处准确输入。
保存文件并退出
就快结束了!!
我们需要做的最后一件事是将我们的xb_start.sh
脚本添加到我们的启动应用程序中,以便xbindkeys
它在我们需要的时候准时启动。
重启并享受!