/sys/class/backlight/ideapad/ 中間輝度ファイルを編集するスクリプトを書くには?

/sys/class/backlight/ideapad/ 中間輝度ファイルを編集するスクリプトを書くには?

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

/sysRAMベースの仮想ファイルシステムです。したがって、そのファイルに対する権限の変更は、再起動後も保持されません。

オプション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

おすすめ記事