Ubuntu 18.04で本当に迷惑な問題があります。私のラップトップには4k 15インチディスプレイが搭載されています。これによりすべてが超小型になるため、使用時には1080x1920に縮小することをお勧めします。仕事中にデュアルモニターをセットアップし、両方をマシンに接続する小さなドック/アダプターに接続しますThunderbolt 3を使用します。NvidiaXサーバーの設定で、デュアルスクリーンが隣り合うように構成し、ラップトップスクリーンをオフにしました。
これらのディスプレイを切断すると、ノートパソコンの画面はフル4k解像度でオンに戻ります。 Nvidia X Serverに入ると、再び1080に変更できます。しかし、次にデュアルモニターに再び接続したとき、セットアップはすべて間違っており、再起動してすべてを正しく再構成するために5分を費やす必要があります。
これを修正する適切な方法はありますか?ディスプレイ構成を自動的に、またはホットキーなどで変更する方法はありますか?
私はすべての最新アップデートとNvidiaドライバー430を使用しています。
これはxrandrを実行した結果です
//Only on laptop screen(no external screen connected)
Screen 0: minimum 8 x 8, current 3840 x 2160, maximum 16384 x 16384
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 connected primary 3840x2160+0+0 (normal left inverted right x axis y axis) 346mm x 194mm
3840x2160 60.00*+ 50.00 48.02
DP-4 disconnected (normal left inverted right x axis y axis)
DP-4.1 disconnected (normal left inverted right x axis y axis)
DP-4.2 disconnected (normal left inverted right x axis y axis)
//When Its connected to my dock, laptop screen disabled and two 1080 monitors.
Screen 0: minimum 8 x 8, current 3840 x 1080, maximum 16384 x 16384
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 connected (normal left inverted right x axis y axis)
3840x2160 60.00 + 50.00 48.02
DP-4 disconnected (normal left inverted right x axis y axis)
DP-4.1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
1920x1080 60.00*+ 75.00 59.94 50.00
1680x1050 59.95
1600x1200 60.00
1600x900 60.00
1440x900 59.89
1280x1024 75.02 60.02
1280x800 59.81
1280x720 60.00 59.94 50.00
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 59.94
640x480 75.00 59.94 59.93
DP-4.2 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 527mm x 296mm
1920x1080 60.00*+ 75.00 59.94 50.00
1680x1050 59.95
1600x1200 60.00
1600x900 60.00
1440x900 59.89
1280x1024 75.02 60.02
1280x800 59.81
1280x720 60.00 59.94 50.00
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 59.94
640x480 75.00 59.94 59.93
これは、好みの表示モードでxrandrを呼び出すスクリプトが必要なようです。その後、そのスクリプトをホットキーにマップできます。
私は非常によく似た問題を抱えていて、長い調査の後に MestreLionによってこの回答が見つかりました です。その中で彼らは githubにある自家製スクリプト を参照しています。アーカイブのため、以下に複製されます。
そのスクリプトを「switch-monitor」という名前のファイルにコピーして貼り付けるだけで、実行権限がアクティブになります。
ファイルが/home/<username>
にあるとすると、次のように入力してスクリプトを実行できます。
/home/<username>/switch-monitor --list
これにより、接続されたモニターのリストが表示され、構成ファイル/home/.config/switch-monitor.conf
が作成されます。
#!/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[@]}"
上記で作成した構成ファイル/home/.config/switch-monitor.conf
を開きます。
# List of monitors, from left to right. Edit to your actual layout
monitors=(<list of 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"
その中で、ディスプレイの物理的なレイアウトを変更してセットアップを反映したり、必要なモードを定義したりできます。したがって、あなたの場合は次のように変更する必要があります:
# List of monitors, from left to right. Edit to your actual layout
monitors=(DP-4.1 DP-4.2 DP-3)
# 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[DP-4.1]="--primary --mode 1920x1080 --rate 60"
monitor_opts[DP-4.2]="--mode 1280x720 --rate 60"
monitor_opts[DP-3]="--mode 1920x1080 --rate 60"
単に この手順 に従ってショートカットを追加します。 command
ボックスに登録する必要があります。
/home/<username>/switch-monitor --all
これは、設定ファイルに登録された特定のオプションですべてのモニターに参加します。
お役に立てれば :)