Bashで構成ファイルをセットアップする必要があり、Zenityが最良の方法であると考えていますが、適切な例でgoogleを使用してリンクを見つけるのに問題があります。
これまでのところ、私のコードは次のようになります。
#!/bin/bash
zenity --forms --title="Laptop Adaptive Brightness" --text="Set Configuration" \
--add-entry="/sys/class/backlight/??????/brightness" \
--add-entry="Night time (min) value" \
--add-entry="Day time (max) value" \
--add-entry="Minutes after sunrise to max" \
--add-entry="Minutes before sunset to min"
exit
結果の画面は次のようになります。
値をZenity変数に事前に割り当てることができない場合、現在の値をフィールドラベルに入力できます。
--add-entry="Night time (min) value (Current: $min)", \
また、ユーザーはフィールドを空白のままにして同じままにするか、新しい値を入力できます。
Zenityフィールドを抽出して変数をbashし、構成ファイルに書き込むための最良の方法がまだありません。また、構成ファイルからbash変数に読み取るコードがありません。
Zenityの例へのリンクまたは完全な答えがさらに良いと思います。ありがとうございました。
PS上記のスクリプトを実行すると、完了時にエラーが報告されます。
$ adaptive-brightness-configGtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
||||
私はこれに少し混乱しており、あなたが私が間違っていることを指摘できるなら、それも高く評価されるでしょう。
Zenityは、入力フィールドが1つしかない場合にのみ前の値を表示できます。そのため、以下のコードは以前の値をラベルフィールドに入力し、ユーザーに新しい値を入力フィールドに入力するか、空白のままにして既存の値を保持するように指示します。
#!/bin/bash
# Read configuration file with entries separated by " " into array
IFS=' ' read -ra CfgArr < ~/bin/adaptive-brightness-configuration-file
# Zenity form with current values in entry label
# because initializing multiple entry data fields not supported
output=$(zenity --forms --title="Laptop Adaptive Brightness Configuration" \
--text="Enter new settings or leave entries blank to keep (existing) settings" \
--add-entry="/sys/class/backlight/??????/brightness driver : (${CfgArr[0]})" \
--add-entry="Day time maximum display brightness : (${CfgArr[1]})" \
--add-entry="Transition minutes after sunrise to maximum : (${CfgArr[2]})" \
--add-entry="Night time minimum display brightness : (${CfgArr[3]})" \
--add-entry="Transition minutes before sunset to minimum : (${CfgArr[4]})")
IFS='|' read -a ZenArr <<<$output # Split zenity entries separated by "|" into array elements
# Update non-blank zenity array entries into configuration array
for i in ${!ZenArr[@]}; do
if [[ ${ZenArr[i]} != "" ]]; then CfgArr[i]=${ZenArr[i]} ; fi
done
# write configuration file using array (fields automatically separated by " ")
echo "${CfgArr[@]}" > ~/bin/adaptive-brightness-configuration-file
数時間のグーグル検索の後、このコードの例が見つかりませんでした。同じコードを探している他の人がこのコードを見つけられることを願っています。
この回答では、zenity
フォームの順序が異なり、フィールドのラベルが拡張されています。 4882はこのintel_backlight
ドライバーの最大値ですが、これは太陽を見つめるようなもので、1000は屋内での実用的な最大値です。
mur に感謝します。元のコードをフィールド名を使用する古いスタイルのCOBOL形式から、配列を使用する最新のBash形式に変換するガイダンスを提供してくれました。
yad
の代わりにzenity
を使用する2018年にプロジェクトを改良し、名前を Eyesome に変更しました。現在、yad
のスーパーチャージされた分岐バージョンであるzenity
を使用しています。 yad
は、bashで同じコーディングスタイルを使用し、機能を追加します。
yad
を使用すると、現在のフィールド値を表示し、タブ付きノートブック形式でフォームを作成できます。
この答えを書いている間、画面が古く、5 to 20 seconds
と表示されていることに気付きました。次の出版物のために1 to 20 seconds
と言うように変更しました。
以下は、タブリストからのモニター3の外観です。
この画面を生成するためのサンプルコードは、次のセクションにリストされています。
3つのモニターは、コードの大部分を構築する共通の機能を共有します。モニター3の場合:
# Monitor 3 notebook page
BuildMonitorPage "$CFG_MON3_NDX"
yad --plug=$KEY --tabnum=4 --form \
"${aMonPage[@]}" > "$res4" &
ただし、BuildMonitorPage
関数は面倒な作業を行います。これは次のようなものです。
BuildMonitorPage () {
# Move configuration array monitor 1-3 to Working Screen fields
# $1 = CfgArr Starting Index Number
aMonPage=()
i="$1"
aMonPage+=("--field=Monitor Number::RO")
aMonPage+=("${CfgArr[$((i++))]}")
aMonPage+=("--field=Monitor Status::CB")
Status=("${CfgArr[$((i++))]}")
cbStatus="Enabled!Disabled"
cbStatus="${cbStatus/$Status/\^$Status}"
aMonPage+=("$cbStatus")
aMonPage+=("--field=Monitor Type::CB")
Type=("${CfgArr[$((i++))]}")
cbType="Hardware!Software"
cbType="${cbType/$Type/\^$Type}"
aMonPage+=("$cbType")
aMonPage+=("--field=Monitor Name:")
aMonPage+=("${CfgArr[$((i++))]}")
aMonPage+=("--field=Internal Name:")
aMonPage+=("${CfgArr[$((i++))]}")
aMonPage+=("--field=Xrandr Name:")
aMonPage+=("${CfgArr[$((i++))]}")
aMonPage+=("--field=Daytime Brightness::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..9999!.01!2)
aMonPage+=("--field=Daytime Red::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..2.0!.01!2)
aMonPage+=("--field=Daytime Green::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..2.0!.01!2)
aMonPage+=("--field=Daytime Blue::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..2.0!.01!2)
aMonPage+=("--field=Nighttime Brightness::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..9999!.01!2)
aMonPage+=("--field=Nighttime Red::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..2.0!.01!2)
aMonPage+=("--field=Nighttime Green::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..2.0!.01!2)
aMonPage+=("--field=Nighttime Blue::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..2.0!.01!2)
aMonPage+=("--field=Current Brightness::RO")
aMonPage+=("${CfgArr[$((i++))]}")
aMonPage+=("--field=Current Gamma::RO")
aMonPage+=("${CfgArr[$((i++))]}")
} # BuildMonitorPage
Yadは、デフォルトで内部的に小数点以下6桁まで数値を保存します。ユーザーへのプレゼンテーション中に、使用する小数点以下の桁数をオーバーライドできます。上記のコードには以下が表示されます。
aMonPage+=("--field=Nighttime Brightness::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..9999!.01!2)
最後の行には、構成配列からの現在の値(CfgArr
)が含まれ、その後に以下が続きます。
0.1
最小許容値9999
最大許容値.01
ユーザーが上矢印または下矢印を押して変更する場合のステップ値2
画面に表示される小数点以下の桁数すべての画面を表示して概要を読むには、こちらを参照してくださいUbuntuに質問してください回答:
eyesome
githubページにアクセスして、すべてのbashコードをここからダウンロードします。
yad
は同じことをはるかに簡単にします
$ yad --form \
--field "/sys/class/backlight/??????/brightness driver" 10 \
--field "Day time maximum display brightness" 20 \
--field "Transition minutes after sunrise to maximum" 30 # And so go on