i3 wmを使用しており、明るさファイルは/sys/class/backlight/ideapad/brightness
。
╰─$ ls -la /sys/class/backlight/ideapad/
-rw-r--r-- 1 root root 4096 Dec 18 16:55 brightness
明るさ(例:4)を変更するには:
sudo sh -c "echo 4 > /sys/class/backlight/ideapad/brightness"
明るさを1ずつ増減するスクリプトを作成し、スクリプトをi3 wm構成ファイルの特定のキーの組み合わせ(たとえば)にバインドして、明るさCTRL+F1
ファイルを編集するのではなく、キーを押して明るさを制御できるようにしたいと思います。毎回明るさを変更したいときはいつでも手動で変更します。
ルートアクセスが必要なので、これを実装する方法がわかりません。私のユーザーをファイル所有者に変更する必要がありますかbrightness
、ファイルグループを変更する必要がありますか?それとも別の方法を考えることができますか?
答え1
/sys
RAMベースの仮想ファイルシステムです。したがって、そのファイルに対する権限の変更は、再起動後も保持されません。
オプション1:アフィレット
私に役立つ唯一のパッケージソリューションです。
一部の最新ノートブックでは、「XRandR」がディスプレイの明るさを設定できない場合があります。この機能はカーネルのACPIインターフェースに移動/統合されました
/sys/class/backlight/
。「acpilight」は、「XRandR」の代わりにACPIインターフェースを使用してコマンドのドロップイン代替機能を提供するため、古い
xbacklight
スクリプトを実行できます。したがって、xbacklight
コンソールとウェイランドでも使用できます(X11をまったく使用せず)。
リポジトリに含まれるディストリビューションはほとんどありませんが、いつでも直接コンパイルしてインストールできます。それでは、
xbacklight +10
明るさが10%増加します。
オプション 2 と 3 の場合は、ideapad
システムで適切なパスコンポーネントを置き換えます。
intel_backlight
そしてacpi_video0
それらはすべて共通です。
オプション2:Udev
video
コマンドの出力にあることを確認してくださいgroups
。そうでない場合は、ユーザーをグループに追加します。
それsudo -e /etc/udev/rules.d/backlight.rules
から。
RUN+="/bin/chgrp video /sys/class/backlight/ideapad/brightness"
RUN+="/bin/chmod 0664 /sys/class/backlight/ideapad/brightness"
再起動。ありがとうございます:Arch LinuxフォーラムのFistrosan。
ソリューション 3.1: C+setuid
このCプログラムは私がしばらく前に書いたソリューションであり、決して私を失望させたことはありません。標準のLinuxシステムにはないCコンパイラ以外には何も必要ありません。
#include <stdlib.h>
#include <stdio.h>
#define BUFSIZE 10
int main(int argc, char **argv) {
FILE *fp;
char scurr[BUFSIZE];
long new, curr, incr, min = 10;
/* An argument with an integer increment must be supplied */
if (argc != 2 || (incr = strtol(argv[1], NULL, 10)) == 0) { return(1); }
/* Retrieve the current brightness and increment it in the brightness file */
if ((fp = fopen("/sys/class/backlight/ideapad/brightness", "r+"))
&& fgets(scurr, BUFSIZE, fp)) {
curr = strtol(scurr, NULL, 10);
rewind(fp);
new = curr + incr;
if (new < min) { new = min; }
fprintf(fp, "%ld\n", new);
fclose(fp);
} else { return(2); }
return(0);
}
コンパイル(br.c
ファイル名、br
実行可能ファイル)、ルートを所有者にして開きます。ユーザーIDビットの設定実行可能ファイルを現在の場所のどこかに置きますPATH
(/usr/local/bin/
これは一般的な選択です)。
cc br.c -o br
chown root br
chmod u+s br
mv br /usr/local/bin/
今実行すると、br -100
明るさは100低くなります。
また、最小輝度をに設定しましたmin = 10
。私のコンピュータでは、この値が非常に低く、ディスプレイがオンになっていることにほとんど気付いていません。必要に応じてこの値を調整してください。
オプション3.2:C +関数
Setuidはbr
完全なroot権限を与えます。非常に注意して必要な権限セットのみを付与するには(たとえば、ファイル権限の確認をバイパスする)、上記と行をchown
次のように置き換えます。chmod
適切な能力
setcap cap_dac_override+ep br
答え2
通常、グループの所有権を変更することをお勧めしますが、再起動するたびにこれを行う必要があります。これを行うには、以下の説明に従ってudevルールを自動的に作成します。アーチスウィキ:
デフォルトでは、ルートのみこの方法で明るさを変更できます。ビデオグループのユーザーが明るさを変更できるようにするには、次のudevルールを使用できます。
/etc/udev/rules.d/backlight.rules
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="acpi_video0", GROUP="video", MODE="0664"
グループのメンバーでない場合は、video
ユーザーをグループに追加します。
sudo gpasswd video -a $(whoami)
グループメンバーシップ情報を更新するためにログアウトしてから再度ログインしました。
su -l $(whoami)
idがあるグループのメンバーであることを確認すると、video
次のように印刷されます。
$ id
uid=1000(ja) gid=100(users) groups=100(users),16(dialout),17(audio),18(video),83(plugdev),215(vboxusers),281(docker)
もちろん、udevルールでユーザーが属するすべてのグループを使用できますが、必ずしもそうではありませんvideo
。