「Xrandr」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (→インストール: add === CLI front-ends === (from English)) |
Kusanaginoturugi (トーク | 投稿記録) (→トラブルシューティング: insert === Screen Blinking === (From English)) |
||
236行目: | 236行目: | ||
== トラブルシューティング == |
== トラブルシューティング == |
||
+ | |||
+ | === Screen Blinking === |
||
+ | |||
+ | For some LCD screens (e.g. Samsung 2343NW, Acer XB280HK, iiyama ProLite XUB3490WQSU-B1...), the command {{ic|cvt -r}} (i.e. with reduced blanking) is to be used. |
||
+ | E.g with ProLite XUB3490WQSU-B1 and Thunderbolt HDMI 2.0 adapter on Dell XPS 13, with 60hz (59,94 selected) this screen is blinking (and the adapter+LCD screen works perfectly on Windows), you have to do : |
||
+ | |||
+ | <code>cvt -r 3440 1440</code> |
||
+ | |||
+ | Wich giving you : |
||
+ | |||
+ | <code># 3440x1440 59.97 Hz (CVT) hsync: 88.82 kHz; pclk: 319.75 MHz |
||
+ | Modeline "3440x1440R" 319.75 3440 3488 3520 3600 1440 1443 1453 1481 +hsync -vsync |
||
+ | </code> |
||
+ | |||
+ | Then you have to do : |
||
+ | |||
+ | <code>xrandr --newmode "3440x1440R" 319.75 3440 3488 3520 3600 1440 1443 1453 1481 +hsync -vsync</code> |
||
+ | |||
+ | and |
||
+ | |||
+ | <code>xrandr --addmode DP1 3440x1440R</code> |
||
+ | |||
+ | Now you can select 59.97hz mode with the best screen resolution, wich not blinking anymore. |
||
+ | |||
+ | [https://pix.toile-libre.org/upload/original/1601935466.png click here for a screenshot] |
||
=== 検出されない解像度を追加する === |
=== 検出されない解像度を追加する === |
2021年5月14日 (金) 16:10時点における版
xrandr は RandR("Resize and Rotate") X Window System 拡張の公式設定ユーティリティです。xrandr を使うことで画面のサイズや向き、反射などを設定できます。マルチモニターの設定についてはマルチディスプレイのページを見て下さい。
インストール
xorg-xrandr をインストールしてください。
グラフィカルフロントエンド
- ARandR — XRandR のシンプルなビジュアルフロントエンド。相対的なモニター位置がグラフィカルに表示され、ドラッグアンドドロップにより変更できます。
- LXRandR — LXDE 向けのスクリーン解像度や外部モニタを管理するツールです
- https://wiki.lxde.org/en/LXRandR || GTK+ 2: lxrandr, GTK+ 3: lxrandr-gtk3
CLI front-ends
- xlayoutdisplay — Detects and arranges displays. Handles: laptop lid state, highest available refresh rates, calculating and applying the actual DPI. Best used in .xinitrc, then can be invoked when plugging/unplugging monitors or closing laptop lid.
設定のテスト
何もオプションを付けずに実行すると、xrandr はシステムで利用可能な出力端子の名前 (VGA-1
, HTMI-1
, など) と各端子で利用できる解像度を表示します (現在の解像度は *
、推奨解像度は +
が後ろに付きます):
xrandr
Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 8192 x 8192 VGA-1 disconnected (normal left inverted right x axis y axis) HTML-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 299mm 1920x1080 59.93 + 60.00* 50.00 59.94 1920x1080i 60.00 50.00 59.94 1680x1050 59.88 ...
xrandr を使うことで特定の出力端子で解像度を設定できます (上記のリストに存在する解像度である必要があります):
$ xrandr --output HDMI-1 --mode 1920x1080
リストに複数のリフレッシュレートがある場合、--rate
オプションを使うことで同時に、または個別にリフレッシュレートを変更できます。例:
$ xrandr --output HDMI-1 --mode 1920x1080
--auto
オプションは特定の出力がオフになっている場合にオンに変えて最大解像度を設定します:
$ xrandr --output HDMI-1 --auto
1回のコマンドで複数の出力端子を指定することもできます。例えば HDMI-1
をオフにして HDMI-2
を最大解像度でオンするには:
$ xrandr --output HDMI-1 --off --output HDMI-2 --auto
設定
xrandr は RandR 拡張のシンプルなインターフェイスであり設定ファイルが存在しません。しかしながら、永続的な設定を行う方法が複数存在します:
- RandR 拡張は X の設定ファイルで設定できます。詳しくは マルチディスプレイ#RandR を参照してください。この方法では静的な設定だけが可能です。
- 動的な設定が必要な場合、X サーバーを起動するたびに xrandr コマンドを実行するようにしてください。詳しくは自動起動#X セッションのスタートアップを参照。この方法の欠点は起動プロセスに遅延が発生するということで、ディスプレイマネージャを使用している場合、ディスプレイマネージャの解像度を変更することはできません。
- xrandr を呼び出すカスタムスクリプトを特定のイベント (例えば外部モニターが接続された時) で実行することもできます。詳しくは acpid を見て下さい。#スクリプト セクションに役に立つようなサンプルスクリプトをいくつか記載しています。
スクリプト
例 1
このスクリプトは外部モニター ($extern
で指定) とデフォルトのモニター ($intern
で指定) を切り替えます。つまり一度にどちらか片方のモニターだけを使うようにします。
スクリプトを実行するときはデフォルトのモニター ($intern
で指定) が接続されているようにしてください。ノートパソコンなら常時接続されているはずです。
#!/bin/bash intern=LVDS1 extern=VGA1 if xrandr | grep "$extern disconnected"; then xrandr --output "$extern" --off --output "$intern" --auto else xrandr --output "$intern" --off --output "$extern" --auto fi
設定を autorandr で設定を自動的に切り替える
autorandr を使うと、ディスプレイを接続したり接続解除するときに自動的に有効化できる xrandr "profiles" を簡単に設定できます。使用方法は ホームページ を参照。
例 2
monsAUR は2つのモニターディスプレイを素早く切り替える POSIX 互換のシェルスクリプトです。
プロジェクターモードなど分かりやすいモードが用意されており、モニター接続時に選択・位置決めを行います (詳しくは [1] を参照)。
例 3
このスクリプトは接続されているモニターを順繰りに切り替えます。現在アクティブなモニターを選択して、次のモニターをオンにして他のモニターはオフにします:
# get info from xrandr connectedOutputs=$(xrandr | grep " connected" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/") activeOutput=$(xrandr | grep -E " connected (primary )?[1-9]+" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/") # initialize variables execute="xrandr " default="xrandr " i=1 switch=0 for display in $connectedOutputs do # build default configuration if [ $i -eq 1 ] then default=$default"--output $display --auto " else default=$default"--output $display --off " fi # build "switching" configuration if [ $switch -eq 1 ] then execute=$execute"--output $display --auto " switch=0 else execute=$execute"--output $display --off " fi # check whether the next output should be switched on if [ $display = $activeOutput ] then switch=1 fi i=$(( $i + 1 )) done # check if the default setup needs to be executed then run it echo "Resulting Configuration:" if [ -z "$(echo $execute | grep "auto")" ] then echo "Command: $default" `$default` else echo "Command: $execute" `$execute` fi echo -e "\n$(xrandr)"
例 3a
このスクリプトは xrandr の全ての出力端子を順繰りに確認します。モニターが接続されていれば、最大解像度を確認して前のデイスプレイの右に配置します。srandrdAUR と i3-wm で使用する例:
~/.xprofile
srandrd ~/.i3/detect_displays.sh
#!/bin/bash XRANDR="xrandr" CMD="${XRANDR}" declare -A VOUTS eval VOUTS=$(${XRANDR}|awk 'BEGIN {printf("(")} /^\S.*connected/{printf("[%s]=%s ", $1, $2)} END{printf(")")}') declare -A POS #XPOS=0 #YPOS=0 #POS="${XPOS}x${YPOS}" POS=([X]=0 [Y]=0) find_mode() { echo $(${XRANDR} |grep ${1} -A1|awk '{FS="[ x]"} /^\s/{printf("WIDTH=%s\nHEIGHT=%s", $4,$5)}') } xrandr_params_for() { if [ "${2}" == 'connected' ] then eval $(find_mode ${1}) #sets ${WIDTH} and ${HEIGHT} MODE="${WIDTH}x${HEIGHT}" CMD="${CMD} --output ${1} --mode ${MODE} --pos ${POS[X]}x${POS[Y]}" POS[X]=$((${POS[X]}+${WIDTH})) return 0 else CMD="${CMD} --output ${1} --off" return 1 fi } for VOUT in ${!VOUTS[*]} do xrandr_params_for ${VOUT} ${VOUTS[${VOUT}]} done set -x ${CMD} set +x
例 4 - xrasengan を使って X のクラッシュを防ぐ
DisplayPort モニターでよくなる、モニターがサスペンドモードになって接続されていないと表示される場合、以下の方法を使って接続されている出力端子をオンにしてください:
declare -i count=2 declare -i seconds=1 while ((count)); do xrandr >/dev/null sleep $seconds ((count--)) done
xrasenganAUR は上記のワークアラウンドを組み込んだ xrandr ラッパーです:
$ xrasengan --force -on DisplayPort-0 -off HDMI-0
--force
オプションを付けると、xrasengan は HDMI-0 がオフになる前に全ての出力端子の状態を更新して、それが唯一接続されていた出力端子だった場合に X がクラッシュするのを防ぎます。
現在の設定をリロードしたいときは、xrasengan の --try-reload-active-layout
オプションを使います。--force
と arandr パッケージの unxrandr を利用してコマンドラインを組み立てます:
$ xrasengan --try-reload-active-layout
上記のコマンドを systemd ユニットやキーボードのバインドで使うことで、DisplayPort モニターがサスペンドから復帰したときに画面が落ちるのを防ぐことができます。
トラブルシューティング
Screen Blinking
For some LCD screens (e.g. Samsung 2343NW, Acer XB280HK, iiyama ProLite XUB3490WQSU-B1...), the command cvt -r
(i.e. with reduced blanking) is to be used.
E.g with ProLite XUB3490WQSU-B1 and Thunderbolt HDMI 2.0 adapter on Dell XPS 13, with 60hz (59,94 selected) this screen is blinking (and the adapter+LCD screen works perfectly on Windows), you have to do :
cvt -r 3440 1440
Wich giving you :
# 3440x1440 59.97 Hz (CVT) hsync: 88.82 kHz; pclk: 319.75 MHz
Modeline "3440x1440R" 319.75 3440 3488 3520 3600 1440 1443 1453 1481 +hsync -vsync
Then you have to do :
xrandr --newmode "3440x1440R" 319.75 3440 3488 3520 3600 1440 1443 1453 1481 +hsync -vsync
and
xrandr --addmode DP1 3440x1440R
Now you can select 59.97hz mode with the best screen resolution, wich not blinking anymore.
検出されない解像度を追加する
ハードウェアやドライバーにバグがあるために、モニターの適切な解像度が xrandr によって検出されないことがあります。例えば、モニターの EDID データブロックが間違っていることが考えられます。その場合でも、適当な解像度を xrandr に追加することができます。また、この方法を応用すると、ドライバーでは有効でないが、実際ハードウエアがサポートしているリフレッシュレートを追加したりもできます。
まず gtf
か cvt
を実行して希望の解像度の Modeline を取得します:
$ cvt 1280 1024
# 1280x1024 59.89 Hz (CVT 1.31M4) hsync: 63.67 kHz; pclk: 109.00 MHz Modeline "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync
Modesetting ドライバーでも同じようなログを見つけられるでしょう。
次に新しい xrandr のモードを作成します。Modeline キーワードは抜かす必要があるので注意してください。
$ xrandr --newmode "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync
モードを作成した後、この新しいモードを現在の出力 (VGA1) に追加してください。先にパラメータを設定したので、モードの名前だけで使うことができます。
$ xrandr --addmode VGA1 1280x1024_60.00
そして画面の解像度を追加した解像度に変更します:
$ xrandr --output VGA1 --mode 1280x1024_60.00
上記の設定は現在のセッションでのみ有効なので注意してください。
テストする解像度について確信が持てない場合、以下のように sleep 5
を追加することで安全に解像度を変更できます:
$ xrandr --output VGA1 --mode 1280x1024_60.00 && sleep 5 && xrandr --newmode "1024x768-safe" 65.00 1024 1048 1184 1344 768 771 777 806 -HSync -VSync && xrandr --addmode VGA1 1024x768-safe && xrandr --output VGA1 --mode 1024x768-safe
また、VGA1
は適当な出力端子の名前に置き換えてください。
EDID checksum is invalid
上記の方法で起動時に *ERROR* EDID checksum is invalid
エラーが発生する場合、KMS#モードの強制と EDID や [2] を見て下さい。
また、xrandr --addmode
で X Error of failed request: BadMatch
というエラーが表示されることがありますが、この場合も EDID のチェックサムが間違っています。詳しく確認したい場合、verbose モードで X を起動して (例: startx -- -logverbose 6
)、Xorg のログに EDID に関するメッセージが出力されていないかチェックしてください。NVIDIA のカードを使っている場合は NVIDIA/トラブルシューティング#xrandr BadMatch を読むことを推奨します。
点滅後に画面の解像度が戻ってしまう
EDID が存在しないモニターで GNOME を使っている場合、上記の#検出されない解像度を追加する方法が機能しないことがあります。xrandr --output
を実行した後に画面が点滅して解像度がリセットされます。
~/.config/monitors.xml
を修正するか、ファイルを完全に削除してから再起動してください。
詳しくは こちら の記事を参照。
検出されない解像度を永続的に追加
xrandr
を使って適当な解像度が見つかったら、/etc/X11/xorg.conf.d/
にエントリを追加することでモードを永続的に追加することができます:
/etc/X11/xorg.conf.d/10-monitor.conf
Section "Monitor" Identifier "VGA1" Modeline "1280x1024_60.00" 109.00 1280 1368 1496 1712 1024 1027 1034 1063 -hsync +vsync Option "PreferredMode" "1280x1024_60.00" EndSection Section "Screen" Identifier "Screen0" Monitor "VGA1" DefaultDepth 24 SubSection "Display" Modes "1280x1024_60.00" EndSubSection EndSection Section "Device" Identifier "Device0" Driver "intel" EndSection
intel
は適当なドライバーに置き換えてください。例: nvidia
。X サーバーを再起動すれば、新しい解像度が設定できるようになるはずです。
上手く行かない場合、Screen と Device セクションを削除して Monitor セクションだけにしてみてください [3]。
解像度が低い
ビデオカードは認識されるのに解像度が低い場合、以下の方法を試すことができます。
例: ATI X1550 ベースのビデオカードと2つの液晶モニター DELL 2408 (最大解像度: 1920x1200) と Samsung 206BW (最大解像度: 1680x1050) を使用。インストール後の最初のログイン時に、デフォルトの解像度が 1152x864 になる。xrandr でも 1152x864 以上の解像度が表示されない。/etc/X11/xorg.conf
を編集して、仮想スクリーンのセクションを追加して、ログアウト・ログインしても上手く解像度が設定されない。
xorg.conf
を変更:
/etc/X11/xorg.conf
Section "Screen" ... SubSection "Display" Virtual 3600 1200 EndSubSection EndSection
数字について: DELL を左に Samsung を右に配置しているため、液晶ディスプレイの横幅の合計は 3600=1920+1680 になり、高さはディスプレイの高い方に合わせて、max(1200,1050)=1200 となります。他のディスプレイの上に液晶ディスプレイを配置する場合、次のように計算します: (max(width1, width2), height1+height2)。
アンダースキャンを利用してオーバースキャンが発生するテレビ解像度を補正
薄型テレビではオーバースキャンによって画像が大きく表示され端のほうが切れてしまうことがあります。
テレビの設定で問題を解決できないか確認してください。テレビの設定でどうにもならないがアンダースキャンをサポートしている場合 ({xrandr --prop} で確認できる) は、underscan
を適用して境界値を変更してください。使用しているテレビによって適切な underscan vborder
と underscan hborder
の値は変わります。自分の目で確認しながら値を増減させてください:
$ xrandr --output HDMI-0 --set underscan on --set "underscan vborder" 25 --set "underscan hborder" 40
--transform を利用してオーバースキャンが発生するテレビ解像度を補正
アンダースキャンが利用できないなら、出力を変形する xrandr --transform "a,b,c,d,e,f,g,h,i"
を利用する解決策もあります。変形方法の詳細は xrandr(1) § RandR_version_1.3_options マニュアルページを参照してください。
例えば、水平座標の変形スケールを 0.8
に、垂直座標を 1.04
に、そして画面を 35 ピクセル右に 19 ピクセル下にするには:
$ xrandr --output HDMI1 --transform 0.80,0,-35,0,1.04,-19,0,0,1
HDMI のフル RGB
Intel のドライバーでは HDMI モニターの出力が正しく設定されないことがあります。Broadcast RGB プロパティ によって色諧調が狭くなると (16-235)、黒が黒ではなく灰色のようになります。