2 Commits

2 changed files with 116 additions and 35 deletions

View File

@@ -1,30 +1,29 @@
# All Kscreen Doctor attributes
- [x] primary
- [ ] priority
- [x] priority
- [x] enable
- [x] disable
- [x] mode
- [x] position
- [x] scale
- [x] orientation / rotation
- [ ] overscan (0-100)
- [ ] vrrpolicy (never / always / automatic)
- [ ] rgbrange (automatic / full / limited)
- [ ] hdr (enable / disable / toggle)
- [ ] sdr-brightness (50-10000)
- [ ] wcg (enable / disable / toggle)
- [ ] iccprofile (path)
- [x] overscan (0-100)
- [x] vrrpolicy (never / always / automatic)
- [x] rgbrange (automatic / full / limited)
- [x] hdr (enable / disable / toggle)
- [x] sdr-brightness (50-10000)
- [x] wcg (enable / disable / toggle)
- [x] iccprofile (path)
- [ ] sdrGamut (0-100)
- [ ] maxBrightnessOverride (disable / int)
- [ ] maxAverageBrightnessOverride (disable / int)
- [ ] minBrightnessOverride (disable / int)
- [ ] colorProfileSource (sRBG / ICC / EDID)
- [ ] brightness (0-100)
- [x] brightness (0-100)
- [ ] colorPowerTradeoff (preferEfficiency / preferAccuracy)
- [ ] dimming (0-100)
- [ ] mirror ( none / output )
- [ ] ddcCi (allow / disallow)
- [ ] maxbpc (automatic / 6-16)
- [x] mirror ( none / output )
- [x] ddcCi (allow / disallow)
- [x] maxbpc (automatic / 6-16)
- [ ] edrPolicy (never / always)
- [ ] sharpness (0 - 100)

View File

@@ -73,6 +73,28 @@ enable_outputs "$enabled_outputs"
log "Disabling disabled outputs..."
enable_outputs "$disabled_outputs"
function apply_attribute {
output_id=$1
attribute=$2
value=$3
value_map=$4
if [ $value != "null" ]; then
if [[ -n "$value_map" ]]; then
log "[PREVALUE] Value supplied for $output_id $attribute: $value"
value=${value_map["$value"]}
log "[POSTVALUE] Value output for $output_id $attribute: $value"
fi
CMD="kscreen-doctor output.$output_id.$attribute.$value"
log "[CMD]" $CMD
$CMD
else
log "Output $output_id has not attribute $attribute, skipping..."
fi
}
function load_profile_to_outputs {
local outputs=$1
@@ -87,22 +109,97 @@ function load_profile_to_outputs {
rotation=$(echo "$out" | jq -r '.rotation')
scale=$(echo "$out" | jq -r '.scale')
mode_id=$(echo "$out" | jq -r '.currentModeId')
brightness=$(echo "$out" | jq -r '.brightness')
brightness=$(awk "BEGIN {printf \"%d\", $brightness * 100}")
ddcCi=$(echo "$out" | jq -r '.ddcCi')
iccProfilePath=$(echo "$out" | jq -r '.iccProfilePath')
# mode_name=$(echo "$out" | jq -r ".modes[] | select(.id == \"$mode_id\") | .name")
# log "[VAR] mode_name:" $mode_name
refresh_rate=$(echo "$out" | jq -r ".modes[] | select(.id == \"$mode_id\") | .refreshRate")
refresh_rate=$(printf "%.0f" "$refresh_rate")
height=$(echo "$out" | jq -r ".modes[] | select(.id == \"$mode_id\") | .size.height")
width=$(echo "$out" | jq -r ".modes[] | select(.id == \"$mode_id\") | .size.width")
mode="${width}x${height}@${refresh_rate}"
replication_source_id=$(echo "$out" | jq -r ".replicationSource")
hdr=$(echo "$out" | jq -r ".hdr")
maxBpc=$(echo "$out" | jq -r ".maxBpc")
overscan=$(echo "$out" | jq -r ".overscan")
rgbRange=$(echo "$out" | jq -r ".rgbRange")
sdrbrightness=$(echo "$out" | jq -r '."sdr-brightness"')
vrrPolicy=$(echo "$out" | jq -r ".vrrPolicy")
wcg=$(echo "$out" | jq -r ".wcg")
declare -A bool_enable_map
bool_enable_map["true"]="enable"
bool_enable_map["false"]="disable"
declare -A rgb_range_map
rgb_range_map["0"]="automatic"
rgb_range_map["full"]="full"
rgb_range_map["limited"]="limited"
apply_attribute $name "wcg" $wcg $bool_enable_map
apply_attribute $name "sdr-brightness" $sdrbrightness
apply_attribute $name "vrrpolicy" $vrrPolicy
apply_attribute $name "rgbrange" $rgbRange $rgb_range_map
CMD="kscreen-doctor output.$name.overscan.$overscan"
log "[CMD]" $CMD
$CMD
if [ "$maxBpc" == 0 ]; then
CMD="kscreen-doctor output.$name.maxbpc.automatic"
else
CMD="kscreen-doctor output.$name.maxbpc.$maxBpc"
fi
log "[CMD]" $CMD
$CMD
if [ "$hdr" == true ]; then
CMD="kscreen-doctor output.$name.hdr.enable"
else
CMD="kscreen-doctor output.$name.hdr.disable"
fi
log "[CMD]" $CMD
$CMD
log "[VAR] replication_source_id: $replication_source_id"
if [ $replication_source_id -neq 0 ]; then
if [ $replication_source_id != 0 ]; then
replication_source_name=$(echo "$outputs.[] | select(.id == \"$replication_source_id\" | .name)" )
log "[VAR] replication_source_name: $replication_source_name"
CMD="kscreen-doctor output.$"
done
CMD="kscreen-doctor output.$name.mirror.$replication_source_name"
log "[CMD]" $CMD
$CMD
else
CMD="kscreen-doctor output.$name.mirror.none"
log "[CMD]" $CMD
$CMD
fi
log "[VAR] mode: $mode"
priority=$(echo "$out" | jq -r '.priority')
if [ $ddcCi == true ]; then
CMD="kscreen-doctor output.$name.ddcCi.allow"
else
CMD="kscreen-doctor output.$name.ddcCi.disallow"
fi
log "[CMD]" $CMD
$CMD
if [ "$iccProfilePath" != "" ]; then
CMD="kscreen-doctor output.$name.iccProfilePath.$iccProfilePath"
log "[CMD]" $CMD
$CMD
fi
CMD="kscreen-doctor output.$name.brightness.$brightness"
log "[CMD]" $CMD
$CMD
#
# Mode (Resolution + refresh)
@@ -139,28 +236,13 @@ function load_profile_to_outputs {
$CMD
fi
CMD="kscreen-doctor output.$name.priority.$priority"
log "[CMD]" $CMD
$CMD
done <<< "$outputs"
}
load_profile_to_outputs "$outputs"
clone_groups=$(jq -c '.clones[]?' "$PROFILE")
function restore_clone_groups {
local clone_groups=$1
while IFS= read -r clone; do
primary=$(echo "$clone" | jq -r '.[0]')
others=$(echo "$clone" | jq -r '.[]' | tail -n +2)
for o in $others; do
CMD="kscreen-doctor output.$o.clone.$primary"
log "[CMD]" $CMD
$CMD
done
done <<< "$clone_groups"
}
restore_clone_groups "$clone_groups"
echo "Display configuration restored."