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.