Xrandrはディスプレイの破損の問題を回避しようとします。

Xrandrはディスプレイの破損の問題を回避しようとします。

数日前、誤ってノートパソコンのディスプレイを落とし、画面の右側が破損していましたが、左側はほとんど使用できました。損傷を引き起こすことなく、その領域に合わせて画面サイズを変更する方法を見つけるためにいくつかの研究を行い、その結果を知りましたxrandr

スクリーンショット

次の.shアーカイブが見つかりましたが、画面を左側に配置する方法、または--transformパラメータまたはコマンドを変更する方法が見つかりませんでした--fb

#!/bin/bash

#change these 4 variables accordingly
ORIG_X=1280
ORIG_Y=800
NEW_X=1160
NEW_Y=800
###

X_DIFF=$(($NEW_X - $ORIG_X))
Y_DIFF=$(($NEW_Y - $ORIG_Y))

ORIG_RES="$ORIG_X"x"$ORIG_Y"
NEW_RES="$NEW_X"x"$NEW_Y"
ACTIVEOUTPUT=$(xrandr | grep -e " connected [^(]" | sed -e "s/\([A-z0-9]\+\) connected.*/\1/")
MODELINE=$(cvt $NEW_X $NEW_Y | grep Modeline | cut -d' ' -f3-)

xrandr --newmode $NEW_RES $MODELINE
xrandr --addmode $ACTIVEOUTPUT $NEW_RES
xrandr --output $ACTIVEOUTPUT --fb $NEW_RES --panning $NEW_RES --mode $NEW_RES
xrandr --fb $NEW_RES --output $ACTIVEOUTPUT --mode $ORIG_RES --transform 1,0,$X_DIFF,0,1,$Y_DIFF,0,0,1

また、次の行の.shアーカイブを実行せずにこれを試しました。

xrandr --output LVDS-1 --fb 800x768 --mode 800x768 --transform 1,0,566,0,1,0,0,0,1

画面は私が望む場所にありますが、コマンドを実行すると画面の左側に黒い枠が表示され、削除できません。

スクリーンショット

ここで何が起こっているのかご存知ですか?

ベストアンサー1

xrandr --fb--mode(、、などではありません)を使って画面サイズを設定します--transform

$ xrandr --fb 800x768

xrandr画面サイズが小さすぎると文句を言いますが、設定は引き続き適用されます。

例:

$ xrandr --fb 1520x1080
xrandr: specified screen 1520x1080 not large enough for output VGA-0 (1920x1080+0+0)
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  29 (RRSetPanning)
  Serial number of failed request:  43
  Current serial number in output stream:  43

# from the xtruss output
--- ConfigureNotify(event=w#000004A8, window=w#000004A8, x=0, y=0, width=1520, height=1080, border-width=0, above-sibling=None, override-redirect=False)

$ xwininfo -root | grep geo
  -geometry 1520x1080+0+0

これはエラーではなく警告です。場合によっては、画面サイズを実際の表示サイズより小さく設定するのが合理的です。

修正する:

マルチヘッドサポートウィンドウマネージャは、Xrandr(3)およびXinerama(3)拡張を介して画面に関する情報を取得し、サイズをルートウィンドウの長方形に制限しません。

一時的な解決策は、ハッキングによる使用Xrandrと拡張を防ぐことです。これは、仮想関数を返された四角形を切り取りラッパーに変換することで改善できます。XineramaLD_PRELOAD

mateこれはlightdmデスクトップ環境および/またはディスプレイマネージャを備えたBanila Debian 9.5で動作しますgdm3

root# apt-get install mate-desktop-environment lightdm
root# apt-get install gcc

root# cat <<'EOT' | cc -fPIC -x c - -shared -o /etc/X11/no_xrr.so
int XineramaIsActive(void *d){ return 0; }
void *XineramaQueryScreens(void *dpy, int *n){ *n = 0; return 0; }
int XineramaQueryExtension(void *d, int *i, int *j){ return 0; }
int XRRQueryExtension(void *d, int *i, int *j){ return 0; }
EOT

root# cat <<'EOT' >/etc/X11/Xsession.d/98-no_xrr
export LD_PRELOAD=/etc/X11/no_xrr.so
case $STARTUP in
/usr/bin/ssh-agent*)
        STARTUP="/usr/bin/ssh-agent env LD_PRELOAD=$LD_PRELOAD ${STARTUP#* }";;
esac
EOT

次にセッションメニューから「MATE」を選択し、lightdmユーザーとしてログインします。

$ LD_PRELOAD= xrandr --fb 800x768

まだ //plasmaまたは を使用して動作していません。gnome3gnome-shellmutter

おすすめ記事