Ist es möglich, einen Monitor in einer Dual-Monitor-Konfiguration (Desktop) schnell zu aktivieren/deaktivieren?

Ist es möglich, einen Monitor in einer Dual-Monitor-Konfiguration (Desktop) schnell zu aktivieren/deaktivieren?

Ich habe ein sehr einfaches Setup mit nur zwei Bildschirmen und drei sehr standardmäßigen Anwendungsfällen:

Mein Setup

+------------------------+----------------+----------+
|         Set-up         | Screen (144Hz) |    TV    |
+------------------------+----------------+----------+
| A – joined or mirrored | Enabled        | Enabled  |
| B – Computer           | Enabled        | Disabled |
| C – Home Theater       | Disabled       | Enabled  |
+------------------------+----------------+----------+

Das bedeutet, dass ich beim Wechseln zwischen Setups diese 4 Szenarien habe:

+------- --------------------+-------------+-----------+
|       Scenarios            | From set-up | To set-up |
+----------------------------+-------------+-----------+
| 1 – Turn on TV             | B           | C         |
| 2 – Turn off TV            | C           | B         |
| 3 – Extend displays        | B/C         | A         |
| 4 – Back to single display | A           | B/C       |
+----------------------------+-------------+-----------+

Mir ist bewusst, dass ich in Ubuntu die Standardtastenkürzel super„+“ pzum Wechseln der Anzeige verwenden kann. Allerdings funktioniert es in keinem dieser Szenarien.

Bei allen muss ich manuell hineingehen und settingsauswählen , was ich möchte UND jedes Mal die Bildwiederholfrequenz des Computerbildschirms von 60 Hz auf 144 Hz erhöhen.devicesdisplay

Gibt es eine Möglichkeit, dies zu automatisieren?? Unter W10 stellen Sie es einmal ein und es merkt sich die Einstellung. Sie können dann durch die Einstellungen (Dual, Single, Projektor, gespiegelt) blättern.

Hier bedeutet Szenario 3, dass die relativen Positionen der Anzeigen jedes Mal neu positioniert werden müssen, und Szenario 4 kann nicht über die Verknüpfung erreicht werden, da mein Desktop nicht über eine „integrierte Anzeige“ verfügt.

Ist es alternativ möglich, ein externes Display als eingebautes Display einzustellen?

Probleme sind:

  1. Wenn ein Bildschirm wieder aktiviert wird, werden seine Einstellungen vollständig zurückgesetzt (Auflösung, Bildwiederholfrequenz und relative Position).
  2. Ohne eingebautes Display ist es nicht möglich, einen Bildschirm über die Tastenkombination super+ zu aktivieren oder zu deaktivieren.p

Antwort1

Wir danken MestreLion, der diese Lösung möglich gemacht hat.

Intensive Forschung späterIch habe auf SO eine verwandte Frage mit diesem tollen Skript gefunden:

#!/bin/bash
#
# monitor-switch - switch outputs using xrand
#
#    Copyright (C) 2012 Rodrigo Silva (MestreLion) <[email protected]>
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program. See <http://www.gnu.org/licenses/gpl.html>

declare -A monitor_opts
declare -a monitors

myname="${0##*/}"
verbose=0

# Read settings from config file
config=${XDG_CONFIG_HOME:-"$HOME"/.config}/"$myname".conf
if [[ -f "$config" ]]; then
    source "$config"
fi

print_monitors() {
    while read -r output conn hex; do
        echo "# $output $conn   $(xxd -r -p <<<"$hex")"
    done < <(xrandr --prop | awk '
    !/^[ \t]/ {
        if (output && hex) print output, conn, hex
        output=$1
        hex=""
    }
    /ConnectorType:/ {conn=$2}
    /[:.]/ && h {
        sub(/.*000000fc00/, "", hex)
        hex = substr(hex, 0, 26) "0a"
        sub(/0a.*/, "", hex)
        h=0
    }
    h {sub(/[ \t]+/, ""); hex = hex $0}
    /EDID.*:/ {h=1}')
}

# if there's no pre-defined monitors list, read from xrandr
# and save them to config file
if [[ -z "$monitors" ]]; then
    while read -r output ; do
        monitors+=("$output")
    done < <(xrandr | awk '$2 ~/^c/{print $1}' | sort)
    cat > "$config" <<-EOF
        # $myname config file
        # List of monitors, from left to right. Edit to your actual layout
        monitors=(${monitors[@]})
        # Extra xrandr options for each monitor.
        # Useful when EDID data does not reflect actual preferred mode
        # Options for non-existing outputs (such as the examples below) are ignored
        # Examples:
        monitor_opts[DFPx]="--mode 1920x1080 --rate 60"
        monitor_opts[DFPy]="--mode 1280x720"
        # As a reference, these were the connected monitors when this config file was created
        # use it as a guide when editing the above monitors list and extra options
        $(print_monitors)
        # For an updated list, run $myname --list
    EOF
fi

message() { printf "%s\n" "$1" >&2 ; }
fatal()   { [[ "$1" ]] && message "$myname: error: $1" ; exit ${2:-1} ; }
argerr()  { printf "%s: %s\n" "$myname" "${1:-error}" >&2 ; usage 1 ; }
invalid() { argerr "invalid argument: $1" ; }
missing() { argerr "missing ${2:+$2 }operand${1:+ from $1}." ; }

usage() {
    cat <<-USAGE
    Usage: $myname [options]
    USAGE
    if [[ "$1" ]] ; then
        cat >&2 <<- USAGE
        Try '$myname --help' for more information.
        USAGE
        exit 1
    fi
    cat <<-USAGE
    Switch monitors using xrandr.
    Options:
      -h|--help          - show this page.
      -v|--verbose       - print in terminal the full xrandr command executed.
      -l|--list          - list connector and monitor names of connected outputs
      -a|--all           - enable all monitors.
      -s|--select OUTPUT - enable monitor OUTPUT, disable all others.
      -l|--left          - enable leftmost monitor.  Alias for --select ${monitors[0]}
      -r|--right         - enable rightmost monitor. Alias for --select ${monitors[${#monitors[@]}-1]}
    Copyright (C) 2012 Rodrigo Silva (MestreLion) <[email protected]>
    License: GPLv3 or later. See <http://www.gnu.org/licenses/gpl.html>
    USAGE
    exit 0
}

# Option handling
for arg in "$@"; do [[ "$arg" == "-h" || "$arg" == "--help" ]] && usage ; done
while (( $# )); do
    case "$1" in
    -v|--verbose) verbose=1 ;;
    -q|--no-notify) notify=0 ;;
    -l|--list) list=1 ;;
    -a|--all) all=1 ;;
    -s|--select) shift ; monitor="$1" ;;
    -l|--left ) monitor="${monitors[0]}" ;;
    -r|--right) monitor="${monitors[${#monitors[@]}-1]}" ;;
    *) invalid "$1" ;;
    esac
    shift
done

if ((list)); then
    echo "Connected monitors:"
    print_monitors
    exit
fi

if [[ -z "$monitor" && -z "$all" ]]; then
    usage
fi

# Loop outputs (monitors)
for output in "${monitors[@]}"; do
    if ((all)) || [[ "$output" = "$monitor" ]]; then
        xrandropts+=(--output "$output" --auto ${monitor_opts["$output"]})
        if ((all)); then
            if [[ "$output" = "${monitors[0]}" ]]; then
                xrandropts+=(--pos 0x0 --primary)
            else
                xrandropts+=(--right-of "$previous")
            fi
            previous="$output"
        else
            xrandropts+=(--primary)
        fi
    else
        xrandropts+=(--output "$output" --off)
    fi
done

((verbose)) && message "$myname: executing xrandr ${xrandropts[*]}"
xrandr "${xrandropts[@]}"

Der Code wird auch geteilt aufGithub.

Mit diesem Skript, das einer Tastenkombination zugeordnet ist, kann ich problemlos zwischen Monitoren wechseln:

monitor-switch --left
monitor-switch --right

Das Skript erstellt außerdem eine Konfigurationsdatei in /home/.config/monitor-switch.conf. Diese 3-zeilige Konfigurationsdatei ermöglicht die Registrierung von zwei Dingen:

  1. Die physische Anordnung der Bildschirme: welcher sich links/rechts vom anderen befindet. Das ist großartig, wenn sich Ihr Hauptbildschirm rechts vom Zweitbildschirm befindet (in meinem Fall).
  2. Der Modus, der beim Einschalten eines Monitors verwendet werden soll (Standard ist xrandr --auto). In meinem kann ich zum Beispiel speichernmonitor_opts[DP-2]="--mode 1920x1080 --rate 144"

Antwort2

Manchmal geraten meine Monitore aus der Ausrichtung (links wird rechts, oben wird unten usw.) und manchmal werden auf meinem zweiten Monitor die Farben verwaschen. Dafür tippe ich einfach xresetund alles wird wieder normal. Ich habe zu diesem Zweck eine Funktion erstellt ~/.bashrc:

$ type -a xreset

xreset is a function

xreset () 
{ 
    # Reset xrandr to normal, first use: xrandr | grep " connected "
    # HDMI-0 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 1107mm x 623mm
    # eDP-1-1 connected primary 1920x1080+3840+2160 (normal left inverted right x axis y axis) 382mm x 215mm
    # DP-1-1 connected 3840x2160+1920+0 (normal left inverted right x axis y axis) 1600mm x 900mm
    xrandr --output HDMI-0  --mode 1920x1080 --pos 0x0       --rotate normal \
           --output eDP-1-1 --mode 1920x1080 --pos 3840x2160 --rotate normal \
           --output DP-1-1  --mode 3840x2160 --pos 1920x0    --rotate normal

}

Sie könnten etwas Ähnliches mit xconfig1, xconfig2, usw. machen und sie dann an Tastenkombinationen binden.

verwandte Informationen