web-dev-qa-db-ja.com

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

数日前、ラップトップのディスプレイを誤って壊してしまいました。画面の右側が損傷していますが、左側の大部分は使用可能です。私はいくつかの調査を行って、画面の寸法を変更して損傷のない領域に収まるようにする方法を見つけたところ、xrandrを見つけました。

enter image description here

次の.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

画面が希望の位置になりましたが、そのコマンドを実行した後、画面の左側に黒い境界線が表示され、削除できません。

enter image description here

ここで何が問題になっているのかわかりますか?

7
RealTive

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)拡張機能を介して画面に関する情報を取得し、ルートウィンドウの四角形の内側にそれらの寸法を固定しません。

一時的な回避策は、LD_PRELOADハックを介してXrandrおよびXinerama拡張機能を使用できないようにすることです。これは、ダミー関数を、返された四角形をトリミングするラッパーに変えることで改善できます。

これは、mateデスクトップ環境とlightdmまたはgdm3ディスプレイマネージャーを備えたVanilla debian 9.5で私にとってうまくいきました:

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

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

$ LD_PRELOAD= xrandr --fb 800x768

まだplasmaまたはgnome3/gnome-Shell/mutterを使用して動作させることはできませんでした。

4
mosvy