5 Commits

9 changed files with 103 additions and 6526 deletions

3
.gitignore vendored
View File

@@ -1 +1,2 @@
profiles/*.json profiles/
*.json

30
all_attributes.md Normal file
View File

@@ -0,0 +1,30 @@
# All Kscreen Doctor attributes
- [x] primary
- [ ] 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)
- [ ] sdrGamut (0-100)
- [ ] maxBrightnessOverride (disable / int)
- [ ] maxAverageBrightnessOverride (disable / int)
- [ ] minBrightnessOverride (disable / int)
- [ ] colorProfileSource (sRBG / ICC / EDID)
- [ ] brightness (0-100)
- [ ] colorPowerTradeoff (preferEfficiency / preferAccuracy)
- [ ] dimming (0-100)
- [ ] mirror ( none / output )
- [ ] ddcCi (allow / disallow)
- [ ] maxbpc (automatic / 6-16)
- [ ] edrPolicy (never / always)
- [ ] sharpness (0 - 100)

View File

@@ -1,15 +0,0 @@
#!/bin/bash
# Make sure a config file was provided
if [ $# -lt 1 ]; then
echo "Usage: $0 <config file>"
exit
fi
# Attempt to parse the config file
INPUT_FILE=$1
echo "Parsing config info from $INPUT_FILE..."
TEST=$(jq '.outputs[]' $INPUT_FILE)
echo $TEST[0]

View File

@@ -1,5 +1,12 @@
#!/usr/bin/env bash #!/usr/bin/env bash
VERBOSE=1
function log {
if [ $VERBOSE -eq 1 ]; then
echo "$@"
fi
}
set -e set -e
# Make sure a config file was provided # Make sure a config file was provided
@@ -27,11 +34,7 @@ fi
# Extract outputs list # Extract outputs list
enabled_outputs=$(jq -c '.outputs[] | select(.enabled == true)' "$PROFILE") enabled_outputs=$(jq -c '.outputs[] | select(.enabled == true)' "$PROFILE")
echo "enabled:"
echo $enabled_outputs
disabled_outputs=$(jq -c '.outputs[] | select(.enabled == false)' "$PROFILE") disabled_outputs=$(jq -c '.outputs[] | select(.enabled == false)' "$PROFILE")
echo "disabled:"
echo $disabled_outputs
outputs=$(jq -c '.outputs[]' "$PROFILE") outputs=$(jq -c '.outputs[]' "$PROFILE")
# Restore enabled/disabled starting with the enabled monitors # Restore enabled/disabled starting with the enabled monitors
@@ -40,25 +43,42 @@ outputs=$(jq -c '.outputs[]' "$PROFILE")
function enable_outputs { function enable_outputs {
local outputs=$1 local outputs=$1
# If empty or only whitespace, return early
[[ -z "$outputs" ]] && return
while IFS= read -r out; do while IFS= read -r out; do
id=$(echo "$out" | jq -r '.id') id=$(echo "$out" | jq -r '.id')
log "[VAR] id:" $id
name=$(echo "$out" | jq -r '.name') name=$(echo "$out" | jq -r '.name')
log "[VAR] name:" $name
enabled=$(echo "$out" | jq -r '.enabled') enabled=$(echo "$out" | jq -r '.enabled')
log "[VAR] enabled:" $enabled
# Enable/disable # Enable/disable
if [[ "$enabled" == "true" ]]; then if [[ "$enabled" == "true" ]]; then
kscreen-doctor "output.$name.enable" CMD="kscreen-doctor output.$name.enable"
log "[CMD]" $CMD
$CMD
else else
kscreen-doctor "output.$name.disable" CMD="kscreen-doctor output.$name.disable"
log "[CMD]" $CMD
$CMD
fi fi
done <<< "$outputs" done <<< "$outputs"
} }
enable_outputs $enabled_outputs log "Enabling enabled outputs..."
enable_outputs $disabled_outputs enable_outputs "$enabled_outputs"
log "Disabling disabled outputs..."
enable_outputs "$disabled_outputs"
function load_profile_to_outputs { function load_profile_to_outputs {
local outputs=$1 local outputs=$1
# If empty or only whitespace, return early
[[ -z "$outputs" ]] && return
while IFS= read -r out; do while IFS= read -r out; do
id=$(echo "$out" | jq -r '.id') id=$(echo "$out" | jq -r '.id')
name=$(echo "$out" | jq -r '.name') name=$(echo "$out" | jq -r '.name')
@@ -66,40 +86,63 @@ function load_profile_to_outputs {
posy=$(echo "$out" | jq -r '.pos.y') posy=$(echo "$out" | jq -r '.pos.y')
rotation=$(echo "$out" | jq -r '.rotation') rotation=$(echo "$out" | jq -r '.rotation')
scale=$(echo "$out" | jq -r '.scale') scale=$(echo "$out" | jq -r '.scale')
mode=$(echo "$out" | jq -r '.currentModeId') mode_id=$(echo "$out" | jq -r '.currentModeId')
# 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")
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")
log "[VAR] replication_source_id: $replication_source_id"
if [ $replication_source_id -neq 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
log "[VAR] mode: $mode"
priority=$(echo "$out" | jq -r '.priority') priority=$(echo "$out" | jq -r '.priority')
#
# Mode (Resolution + refresh) # Mode (Resolution + refresh)
kscreen-doctor "output.$id.mode.$mode" # CMD="kscreen-doctor output.$name.mode.$mode"
CMD="kscreen-doctor output.$name.mode.$mode"
log "[CMD]" $CMD
$CMD
# Position # Position
kscreen-doctor "output.$id.position.$posx,$posy" CMD="kscreen-doctor output.$name.position.$posx,$posy"
log "[CMD]" $CMD
$CMD
# Scale # Scale
kscreen-doctor "output.$id.scale.$scale" CMD="kscreen-doctor output.$name.scale.$scale"
log "[CMD]" $CMD
$CMD
# Rotation (map from JSON names to kscreen-doctor options) # Rotation (map from JSON names to kscreen-doctor options)
CMD=""
case "$rotation" in case "$rotation" in
"1") kscreen-doctor "output.$id.rotation.normal" ;; "1") CMD="kscreen-doctor output.$name.rotation.normal" ;;
"2") kscreen-doctor "output.$id.rotation.left" ;; "2") CMD="kscreen-doctor output.$name.rotation.left" ;;
"4") kscreen-doctor "output.$id.rotation.inverted" ;; "4") CMD="kscreen-doctor output.$name.rotation.inverted" ;;
"8") kscreen-doctor "output.$id.rotation.right" ;; "8") CMD="kscreen-doctor output.$name.rotation.right" ;;
esac esac
log "[CMD]" $CMD
$CMD
# Primary / Not Primary # Primary / Not Primary
echo $priority
if [ $priority -eq 1 ]; then if [ $priority -eq 1 ]; then
kscreen-doctor "output.$id.primary" CMD="kscreen-doctor output.$name.primary"
log "[CMD]" $CMD
$CMD
fi fi
done <<< "$outputs" done <<< "$outputs"
} }
load_profile_to_outputs $outputs load_profile_to_outputs "$outputs"
#########################
# 2. Restore clone groups
#########################
clone_groups=$(jq -c '.clones[]?' "$PROFILE") clone_groups=$(jq -c '.clones[]?' "$PROFILE")
@@ -110,11 +153,14 @@ function restore_clone_groups {
others=$(echo "$clone" | jq -r '.[]' | tail -n +2) others=$(echo "$clone" | jq -r '.[]' | tail -n +2)
for o in $others; do for o in $others; do
kscreen-doctor "output.$o.clone.$primary" CMD="kscreen-doctor output.$o.clone.$primary"
log "[CMD]" $CMD
$CMD
done done
done <<< "$clone_groups" done <<< "$clone_groups"
} }
restore_clone_groups $clone_groups restore_clone_groups "$clone_groups"
echo "Display configuration restored." echo "Display configuration restored."

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff

View File

File diff suppressed because it is too large Load Diff