Я должен установить конфигурационный файл в 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, чтобы колотить переменные и писать им в конфигурационный файл. Также я пропускаю код для чтения из конфигурационного файла для избиения переменных.
Я ценил бы ссылку на пример Zenity, или полный ответ будет еще лучше.Спасибо.
О PS, Когда я запускаю вышеупомянутый скрипт ошибка, сообщают, когда это завершается:
$ adaptive-brightness-configGtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
||||
Я немного смущен этим и если можно указать на то, что я делаю неправильно, который ценился бы также.
Zenity может только отобразить предыдущее значение, когда существует только одно поле записи. Как таковой код ниже помещает предыдущие значения в поля маркировки и дает пользователю команду вводить новое значение в поля записи или оставлять его незаполненный для хранения существующего значения.
#!/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
Я был удивлен после того, как часы поиска с помощью Google, примеры этого кода не могли быть найдены. Надо надеяться, другие, гуглящие ту же проблему, могут найти этот код.
В этом ответе zenity
форма имеет другой порядок и расширенные маркировки для полей. Хотя 4882 максимально для этого intel_backlight
драйвер это похоже пристально на солнце и 1000, является практическим максимумом в закрытом помещении.
Большое спасибо muru для руководства, преобразовывающего исходный код из формата КОБОЛа старого стиля с помощью имен полей, к современным массивам использования формата Bash.
yad
вместо zenity
В 2018 я обновил проект и переименовал его к Привлекательному. Теперь это использует yad
который является перегруженной разветвленной версией zenity
. yad
использует тот же стиль кодирования в ударе и добавляет больше функциональности.
Используя yad
можно отобразиться, текущие значения полей плюс создают формы в формате ноутбука с вкладками:
При записи этого ответа я заметил, что экран устарел и говорит 5 to 20 seconds
. Я изменил его для высказывания 1 to 20 seconds
для следующей публикации.
Вот то, на что Монитор 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 и загрузка весь код удара здесь:
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