我可以使用类似的东西
setpci -s 00:02.0 F4.B=XX
将 00:02.0 替换为您的设备地址(通过 lspci | grep VGA 获得),并将 XX 替换为 00 和 FF 之间的值(FF = 100%、7F = 50% 等...),以从终端手动更改亮度(作为 root,或使用适当的 chmod)。
我希望制作一个脚本来通过按键手动更改亮度。为此,我需要获得当前状态(上面XX)为了将屏幕的当前亮度转发给脚本。
如何获取当前状态?
答案1
Xbacklight 在我的上网本上不起作用; ACPI 子系统看不到背光。不过,我已经将这两个 shell 脚本组合在一起:
brightup.sh:
#!/bin/bash
var1=`sudo setpci -s 00:02.0 f4.b | tr [:lower:] [:upper:]`;
var2=$(echo "obase=16;ibase=16;${var1} + 8" |bc)
sudo setpci -s 00:02.0 f4.b=$var2
brightdown.sh:
#!/bin/bash
var1=`sudo setpci -s 00:02.0 f4.b | tr [:lower:] [:upper:]`;
var2=$(echo "obase=16;ibase=16;${var1} - 8" |bc)
sudo setpci -s 00:02.0 f4.b=$var2
我遇到的问题是它需要 sudo。这样做的最终目标是将这两个 shell 脚本设置为作为键盘快捷键运行,因此我需要弄清楚如何设置 setpci 以便能够使用 sudo 在没有密码的情况下运行。我知道,这可能不安全,而且很混乱,但目前我没有看到任何其他选择。
另外,我为破坏这个线程而道歉,但自从我每天转回使用 Linux 以来,这些是我一直在互联网上寻找的两个脚本。
答案2
我最终制作了一些脚本来解决我的问题。
- 我将以下三个脚本绑定到方便的按键(CTRL+ALT+PGUP 用于提高亮度,CTRL+ALT+PGDN 用于降低亮度,CTRL+ALT+HOME 用于将亮度恢复为默认值)。
这些脚本需要 sudoless setpci (在查看运行 setpci 所得到的错误后,您可能可以使用一些 chmod 来避免编辑 sudoers),如下所示:
androith ALL=(ALL) NOPASSWD: /usr/bin/setpci
最后,您必须保存一个类似于 /home/androith/.scripts/brightness/state 的“状态文件”,其中仅包含一个状态(从 BF 开始就可以)。
亮度提升.sh
#!/bin/bash
# Get the stored state from file
exec < /home/androith/.scripts/brightness/state # stdin replaced by this file
read state # first line of file goes to state variable
# Increase the state, up to FF
new_state=$(echo "$[0x$state+0x10]") # in decimal
if [ "$new_state" -gt 255 ] # 255 = FF in hex
then
echo "Already at maximal brightness."
else
state=$(echo "obase=16; $new_state" | bc) # put into hex
echo "Setting brightness to $state and storing state..."
sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
echo $state > /home/androith/.scripts/brightness/state
fi
亮度降低.sh
#!/bin/bash
# Get the stored state from file
exec < /home/androith/.scripts/brightness/state # stdin replaced by this file
read state # first line of file goes to state variable
# Decrease the state, down to FF
new_state=$(echo "$[0x$state-0x10]") # in decimal
if [ "$new_state" -lt 15 ] # 15 = 0F in hex
then
echo "Already at minimal brightness."
else
state=$(echo "obase=16; $new_state" | bc) # update and put into hex
echo "Setting brightness to $state and storing state..."
sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
echo $state > /home/androith/.scripts/brightness/state
fi
亮度默认.sh
#!/bin/bash
# Set brightness to default value
state=AF
sudo setpci -s 00:02.0 F4.B=$state # passwordless sudo
echo $state > /home/androith/.scripts/brightness/state
答案3
有一个小程序叫xbacklight。它可以获取并设置屏幕的亮度。如果您有网络摄像头,您甚至可以让它通过拍照、获取平均亮度并相应地设置屏幕亮度来自动设置亮度。
image='/home/kim/brightness.jpeg'
streamer -c /dev/video0 -b 16 -o $image >/dev/null 2>/dev/null && \
meanline=`convert $image -colorspace gray -verbose info: | grep '^\s*mean: '`
if [[ $meanline =~ \((.*)\) ]]; then
brightness="${BASH_REMATCH[1]}"
brightness=`echo "$brightness * 200" | bc`
echo $brightness
xbacklight -set $brightness
xbacklight
fi
rm -f "$image"
答案4
我知道这不是一种非常安全的方法..但它有效。
#!/bin/bash
password="your_password_here"
set_value_to=$(zenity --title="Brightness control" --scale --text="Adjust the brightness value" --min-value=5 --max-value=95 --value=50)
echo $password | sudo -S setpci -s 00:02.0 f4.b=$set_value_to