diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89b6090 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +profiles/*.json \ No newline at end of file diff --git a/load-display-profile.sh b/load-display-profile.sh index 5f8ecce..773055b 100755 --- a/load-display-profile.sh +++ b/load-display-profile.sh @@ -25,58 +25,73 @@ if ! command -v kscreen-doctor &>/dev/null; then exit 1 fi - -####################### -# Parse JSON + restore -####################### - # Extract outputs list +enabled_outputs=$(jq -c '.outputs[] | select(.enabled=="true")' "$PROFILE") +echo "enabled:" +echo $enabled_outputs +disabled_outputs=$(jq -c '.outputs[] | select(.enabled=="false")' "$PROFILE") +echo "disabled:" +echo $dis outputs=$(jq -c '.outputs[]' "$PROFILE") -# 1. Restore enabled/disabled + basic properties -while IFS= read -r out; do - id=$(echo "$out" | jq -r '.id') - enabled=$(echo "$out" | jq -r '.enabled') - posx=$(echo "$out" | jq -r '.pos.x') - posy=$(echo "$out" | jq -r '.pos.y') - rotation=$(echo "$out" | jq -r '.rotation') - scale=$(echo "$out" | jq -r '.scale') - mode=$(echo "$out" | jq -r '.currentModeId') - priority=$(echo "$out" | jq -r '.priority') +# Restore enabled/disabled starting with the enabled monitors +# Starting with a disabled monitor might not work if it was +# previously the only enabled monitor - # Enable/disable - if [[ "$enabled" == "true" ]]; then - kscreen-doctor "output.$id.enable" - else - kscreen-doctor "output.$id.disable" - continue - fi +function enable_outputs { + local outputs=$1 + while IFS= read -r out; do + id=$(echo "$out" | jq -r '.id') + name=$(echo "$out" | jq -r '.name') + enabled=$(echo "$out" | jq -r '.enabled') - # Mode (Resolution + refresh) - kscreen-doctor "output.$id.mode.$mode" + # Enable/disable + if [[ "$enabled" == "true" ]]; then + kscreen-doctor "output.$name.enable" + else + kscreen-doctor "output.$name.disable" + fi + done <<< "$outputs" +} - # Position - kscreen-doctor "output.$id.position.$posx,$posy" +function load_profile_to_outputs { + local outputs=$1 + while IFS= read -r out; do + id=$(echo "$out" | jq -r '.id') + name=$(echo "$out" | jq -r '.name') + posx=$(echo "$out" | jq -r '.pos.x') + posy=$(echo "$out" | jq -r '.pos.y') + rotation=$(echo "$out" | jq -r '.rotation') + scale=$(echo "$out" | jq -r '.scale') + mode=$(echo "$out" | jq -r '.currentModeId') + priority=$(echo "$out" | jq -r '.priority') - # Scale - kscreen-doctor "output.$id.scale.$scale" - - # Rotation (map from JSON names to kscreen-doctor options) - case "$rotation" in - "1") kscreen-doctor "output.$id.rotation.normal" ;; - "2") kscreen-doctor "output.$id.rotation.left" ;; - "4") kscreen-doctor "output.$id.rotation.inverted" ;; - "8") kscreen-doctor "output.$id.rotation.right" ;; - esac + # Mode (Resolution + refresh) + kscreen-doctor "output.$id.mode.$mode" - # Primary / Not Primary - echo $priority - if [ $priority -eq 1 ]; then - kscreen-doctor "output.$id.primary" - fi + # Position + kscreen-doctor "output.$id.position.$posx,$posy" + # Scale + kscreen-doctor "output.$id.scale.$scale" + + # Rotation (map from JSON names to kscreen-doctor options) + case "$rotation" in + "1") kscreen-doctor "output.$id.rotation.normal" ;; + "2") kscreen-doctor "output.$id.rotation.left" ;; + "4") kscreen-doctor "output.$id.rotation.inverted" ;; + "8") kscreen-doctor "output.$id.rotation.right" ;; + esac -done <<< "$outputs" + # Primary / Not Primary + echo $priority + if [ $priority -eq 1 ]; then + kscreen-doctor "output.$id.primary" + fi + + done <<< "$outputs" + ` +} ######################### @@ -85,13 +100,15 @@ done <<< "$outputs" clone_groups=$(jq -c '.clones[]?' "$PROFILE") -while IFS= read -r clone; do - primary=$(echo "$clone" | jq -r '.[0]') - others=$(echo "$clone" | jq -r '.[]' | tail -n +2) +function restore_clone_groups { + 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 - kscreen-doctor "output.$o.clone.$primary" - done -done <<< "$clone_groups" + for o in $others; do + kscreen-doctor "output.$o.clone.$primary" + done + done <<< "$clone_groups" +} echo "Display configuration restored." \ No newline at end of file