Je dois installer un fichier de configuration dans Bash et croire que Zenity est la meilleure méthode, mais je ne parviens pas à trouver un lien à l'aide de Google avec un exemple approprié.
Jusqu'à présent, mon code ressemble à ceci:
#!/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
et l'écran qui en résulte ressemble à ceci:
Si les valeurs ne peuvent pas être prédéfinies aux variables Zenity, je pourrais alors mettre la valeur actuelle dans l'étiquette du champ, par exemple:
--add-entry="Night time (min) value (Current: $min)", \
Et l'utilisateur peut laisser le champ vide pour rester le même ou entrer une nouvelle valeur.
Il me manque encore le meilleur moyen d'extraire les champs Zenity en bash des variables et de les écrire dans le fichier de configuration. De plus, il me manque le code pour lire le fichier de configuration dans les variables bash.
J'apprécierais un lien vers un exemple de Zenity ou une réponse complète serait encore mieux. Je vous remercie.
PS Lorsque j'exécute le script ci-dessus, une erreur est signalée à la fin:
$ adaptive-brightness-configGtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
||||
Cela me laisse un peu perplexe et si vous pouviez indiquer ce que je faisais mal, nous l'apprécierions également.
Zenity ne peut afficher la valeur précédente que s'il existe un seul champ de saisie. En tant que tel, le code ci-dessous place les valeurs précédentes dans les champs d'étiquette et demande à l'utilisateur de saisir une nouvelle valeur dans les champs d'entrée ou de le laisser vide pour conserver la valeur existante.
#!/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
J'ai été surpris après des heures de recherches sur Google, des exemples de ce code n'ont pas pu être trouvés. Espérons que d'autres personnes googler le même problème peuvent trouver ce code.
Dans cette réponse, la forme zenity
a un ordre différent et des étiquettes développées pour les champs. Bien que 4882 soit maximal pour ce pilote intel_backlight
c'est comme regarder dans le soleil et 1000 est le maximum pratique à l'intérieur.
Merci beaucoup à mur pour avoir guidé la conversion du code original au format COBOL de style ancien à l'aide de noms de champs, au format Bash moderne à l'aide de tableaux.
yad
au lieu de zenity
En 2018, j'ai réorganisé le projet et l'ai renommé en Eyesome . Maintenant, il utilise yad
qui est une version fourchue super chargée de zenity
. yad
utilise le même style de codage que bash et ajoute plus de fonctionnalités.
En utilisant yad
, vous pouvez afficher les valeurs des champs actuels et créer des formulaires au format cahier à onglets:
En écrivant cette réponse, j’ai remarqué que l’écran était périmé et indiquait 5 to 20 seconds
. Je l'ai changé pour dire 1 to 20 seconds
pour la prochaine publication.
Voici à quoi ressemble Monitor 3 dans la liste des onglets:
Un exemple de code permettant de générer cet écran est présenté dans la section suivante.
Les trois moniteurs partagent une fonction commune pour construire la majeure partie du code. Pour Monitor 3, nous utilisons:
# Monitor 3 notebook page
BuildMonitorPage "$CFG_MON3_NDX"
yad --plug=$KEY --tabnum=4 --form \
"${aMonPage[@]}" > "$res4" &
La fonction BuildMonitorPage
fait le gros du travail. Voici à quoi cela ressemble:
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 stockera les numéros en interne avec 6 décimales par défaut. Pendant la présentation à l'utilisateur, vous pouvez remplacer le nombre de décimales utilisées. Dans le code ci-dessus, vous voyez:
aMonPage+=("--field=Nighttime Brightness::NUM")
aMonPage+=("${CfgArr[$((i++))]}"!0.1..9999!.01!2)
La dernière ligne contient la valeur actuelle du tableau de configuration (CfgArr
) suivie de:
0.1
valeur minimale autorisée9999
valeur maximale autorisée.01
valeur de pas si l'utilisateur appuie sur la flèche vers le haut ou vers le bas pour changer2
nombre de décimales affichées à l'écranPour voir tous les écrans et lire un aperçu voir ceci Ask Ubuntu Réponse:
Visitez la page eyesome
github et téléchargez tout le code bash ici:
yad
fait la même chose beaucoup plus facilement
$ 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