setpci - 밝기를 수동으로 변경하는 스크립트 작성

setpci - 밝기를 수동으로 변경하는 스크립트 작성

나는 다음과 같은 것을 사용할 수 있습니다

setpci -s 00:02.0 F4.B=XX

00:02.0을 장치 주소(lspci | grep VGA를 통해 획득)로 바꾸고 XX를 터미널에서 00과 FF(FF = 100%, 7F = 50% 등...) 사이의 값으로 바꾸세요. 밝기를 수동으로 변경하세요(루트 권한으로) , 또는 적절한 chmod 사용).

키 누르기를 통해 밝기를 수동으로 변경하는 스크립트를 만들고 싶습니다. 이를 위해 나는 얻어야 한다현재 상태(위 XX)현재 화면 밝기를 스크립트로 전달하기 위해.

현재 상태를 어떻게 알 수 있나요?

답변1

Xbacklight가 내 넷북에서 작동하지 않습니다. ACPI 하위 시스템이 백라이트를 볼 수 없습니다. 그러나 저는 다음 두 가지 쉘 스크립트를 결합했습니다.

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가 필요하다는 것입니다. 최종 목표는 이 두 셸 스크립트가 키보드 단축키로 실행되도록 설정하는 것이므로 sudo를 사용하여 암호 없이 실행할 수 있도록 setpci를 설정하는 방법을 알아내야 합니다. 나도 알아요, 이것은 아마도 안전하지 않고 지저분할 것입니다. 하지만 현재로서는 다른 옵션이 보이지 않습니다.

또한 이 스레드를 스포일러한 것에 대해 사과드립니다. 그러나 이것은 제가 매일 Linux를 사용하도록 다시 전환한 이후 인터넷에서 찾고 있던 두 개의 스크립트입니다.

답변2

결국 내 문제를 해결하는 몇 가지 스크립트를 만들었습니다.

  • 다음 세 가지 스크립트를 편리한 키 입력에 바인딩했습니다(밝기를 높이려면 CTRL+ALT+PGUP, 밝기를 낮추려면 CTRL+ALT+PGDN, 밝기를 기본값으로 되돌리려면 CTRL+ALT+HOME).
  • 이러한 스크립트에는 다음과 같이 sudoless setpci가 필요합니다(setpci를 실행하면서 발생하는 오류를 확인한 후 sudoer 편집을 피하기 위해 일부 chmod를 사용할 수 있음).

    안드로이스 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

관련 정보