X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=laptop-xrandr;h=6701e74525d7c2203a4a03a5fc9c533596b04ec9;hb=f27b67a1dfa58b5f101bba607b2f91a73e65299e;hp=af21928b789f1ef4cd95089463966e4c7cc849a9;hpb=9a0f77b0495e6f2643d5646c54b4c99cf3118c67;p=distro-setup diff --git a/laptop-xrandr b/laptop-xrandr index af21928..6701e74 100755 --- a/laptop-xrandr +++ b/laptop-xrandr @@ -1,19 +1,56 @@ #!/bin/bash +# I, Ian Kelling, follow the GNU license recommendations at +# https://www.gnu.org/licenses/license-recommendations.en.html. They +# recommend that small programs, < 300 lines, be licensed under the +# Apache License 2.0. This file contains or is part of one or more small +# programs. If a small program grows beyond 300 lines, I plan to switch +# its license to GPL. + +# Copyright 2024 Ian Kelling + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + set -e; . /usr/local/lib/bash-bear; set +e +# eg eDP-1 connected primary +laptop_out=$(xrandr | awk '$3 == "primary" {print $1}') +output=$(xrandr | grep -E "^(HDMI|DP)[^ ]* connected [0-9]" | awk '{print $1}' ||:) -output=HDMI2 -output=DP1 +left_right_arg=--right-of +if [[ $output ]]; then + + # identify monitors that are always on the left. + if [[ $output == HDMI2 && $(sha256sum /dev/null; then - xrandr --auto -else xrandr --output $output --off sleep 2 - xrandr --output $output --right-of eDP1 --mode 3840x2160 + mode=$(xrandr | grep -A1 -E "^$output" | tail -n1 | awk '{print $1}') + # eg: 3840x2160 + echo mode=$mode + xrandr --output $output $left_right_arg $laptop_out --mode $mode for i in 1 2 4 5 6 7 8 9 10; do - # if the workspace is already there, this will fail + # if the workspace is already there, this will fail. + # if the workspace doesn't exist yet, it fails with: + # ERROR: No output matched i3-msg '[workspace="'$i'"]' move workspace to output $output ||: done +else + xrandr --auto + fi