Xrandr problema tentando evitar exibição quebrada

6

Dias atrás eu quebrei a tela do meu laptop por acidente, o lado direito da tela está danificado, mas a maior parte do lado esquerdo é utilizável. Eu faço uma pesquisa tentando encontrar uma maneira de modificar a dimensão da tela para caber na área sem dano e encontrei xrandr.

Encontreiopróximoarquivo.sh,masnãoconsigoencontrarumamaneiradecolocaratelanoladoesquerdo,nemmodificandoosparâmetros--transformouocomando--fb.

#!/bin/bash#changethese4variablesaccordinglyORIG_X=1280ORIG_Y=800NEW_X=1160NEW_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.*//")
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

Eu também tentei fazer isso sem o arquivo .sh executando a próxima linha:

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

A tela tomou a posição que eu quero, mas depois de executar esse comando, uma borda preta no lado esquerdo da tela aparece e não consigo removê-la.

Alguma ideia do que está errado aqui?

    
por RealTive 30.09.2018 / 23:02

1 resposta

4

Basta definir o tamanho da tela com xrandr --fb (sem --mode , --transform , o que for).

$ xrandr --fb 800x768

xrandr vai reclamar que o tamanho da tela é muito pequeno, mas aplicará as configurações mesmo assim.

Exemplo:

$ 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

Isso provavelmente deve ser um aviso, e não um erro; há situações em que faz todo o sentido definir o tamanho da tela como algo menor que a (s) tela (s) real (ais).

Atualização:

Gerentes de janela habilitados para várias cabeças obtêm as informações sobre a (s) tela (s) através das extensões Xrandr (3) e Xinerama (3) e não prendem suas dimensões dentro do retângulo da janela raiz.

Uma solução temporária seria impedir que eles usem as extensões Xrandr e Xinerama por meio de LD_PRELOAD hack. Isso poderia ser melhorado ao transformar as funções fictícias em invólucros que aparam os retângulos retornados.

Isso funcionou para mim no vanilla debian 9.5 com o ambiente de área de trabalho mate e o gerenciador de exibição lightdm ou 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

Em seguida, no menu de sessão de lightdm escolha "MATE" e como usuário conectado:

$ LD_PRELOAD= xrandr --fb 800x768

Eu não consegui fazer isso funcionar com plasma ou gnome3 / gnome-shell / mutter ainda.

    
por 01.10.2018 / 01:53