setpci - 明るさを手動で変更するスクリプトの作成

setpci - 明るさを手動で変更するスクリプトの作成

私は次のようなものを使用できます

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 サブシステムがバックライトを表示できません。しかし、私は次の2つのシェルスクリプトを組み合わせました。

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が必要であるということです。最後の目標は、これら2つのシェルスクリプトがキーボードショートカットで実行されるように設定することであるため、sudoを使用してパスワードなしで実行できるようにsetpciを設定する方法を理解する必要があります。私も知っている、これはおそらく安全ではなく汚れているだろう。しかし、現時点では他のオプションは見えません。

また、このスレッドをスポイラーしたことについてお詫び申し上げます。しかし、これは私が毎日Linuxを使用するように切り替えた後、インターネットで探していた2つのスクリプトです。

答え2

最終的に私の問題を解決するいくつかのスクリプトを作成しました。

  • 次の3つのスクリプトを便利なキーストロークにバインドしました(明るさを上げるにはCTRL + ALT + PGUP、明るさを下げるにはCTRL + ALT + PGDN、明るさをデフォルトに戻すにはCTRL + ALT + HOME)。
  • これらのスクリプトには、次のようにsudoless setpciが必要です(setpciの実行中に発生するエラーを確認した後、sudoerの編集を避けるためにいくつかのchmodを使用できます)。

    Android ALL=(ALL) NOPASSWD: /usr/bin/setpci

  • 最後に、1つの状態のみを含む/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という小さなプログラムがあります。画面の明るさを取得して設定できます。 Webカメラをお持ちの場合は、写真を撮って平均的な明るさを取得し、それに応じて画面の明るさを設定して自動的に明るさを設定することもできます。

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

関連情報