%20schnell%20zu%20aktivieren%2Fdeaktivieren%3F.png)
Ich habe ein sehr einfaches Setup mit nur zwei Bildschirmen und drei sehr standardmäßigen Anwendungsfällen:
+------------------------+----------------+----------+
| 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
„+“ p
zum Wechseln der Anzeige verwenden kann. Allerdings funktioniert es in keinem dieser Szenarien.
Bei allen muss ich manuell hineingehen und settings
auswählen , was ich möchte UND jedes Mal die Bildwiederholfrequenz des Computerbildschirms von 60 Hz auf 144 Hz erhöhen.devices
display
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:
- Wenn ein Bildschirm wieder aktiviert wird, werden seine Einstellungen vollständig zurückgesetzt (Auflösung, Bildwiederholfrequenz und relative Position).
- 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:
- 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).
- 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 xreset
und 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.