A maneira mais fácil de corrigir isso é modificar a origem de rxvt
ou a origem de openbox
e recompilar. Consulte a parte inferior desta resposta para duas correções muito simples .
Outra maneira é usar um LD_PRELOAD
hack que desativará o sinal PResizeInc
ao obter a propriedade da janela WM_NORMAL_HINTS
e impedirá que ele seja ativado ao definir essa propriedade. Isso afetará apenas as propriedades width_inc
e height_inc
- programas que definem o tamanho mínimo da janela ou a taxa de proporção continuarão funcionando bem.
$ cat no_inc_size_hints.c
#define _GNU_SOURCE
#include <dlfcn.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
Status XGetWMNormalHints(Display *dpy, Window w, XSizeHints *hp, long *rp){
static typeof (XGetWMNormalHints) *orig;
Status r;
if(!orig) orig = dlsym(RTLD_NEXT, "XGetWMNormalHints");
if((r = orig(dpy, w, hp, rp)))
hp->flags &= ~PResizeInc;
return r;
}
void XSetWMNormalHints(Display *dpy, Window w, XSizeHints *hp){
static typeof (XSetWMNormalHints) *orig;
if(!orig) orig = dlsym(RTLD_NEXT, "XSetWMNormalHints");
hp->flags &= ~PResizeInc;
orig(dpy, w, hp);
}
$ cc -shared -fPIC -Wall no_inc_size_hints.c -ldl -o no_inc_size_hints.so
Em seguida, urxvt
ou openbox
terão que ser executados com o
LD_PRELOAD="$LD_PRELOAD /absolute/path/to/no_inc_size_hints.so"
variável em seu ambiente. Exemplo:
$ LD_PRELOAD='pwd'/no_inc_size_hints.so openbox --replace
Existem dois problemas com isso:
1) urxvt
é geralmente instalado como um binário utg setgid, e a variável LD_PRELOAD
é limpa ao executar um binário set [gu] id. Procure na página man por que a permissão utmp é (não) necessária.
Então você terá que copiar o executável urxvt
em outro lugar (o que irá desativar o bit setgid). Exemplo:
$ cp 'which urxvt' .; LD_PRELOAD='pwd'/no_inc_size_hints.so ./urxvt
2) O gerenciador de janelas geralmente é chamado por ssh-agent
dos scripts /etc/X11/Xsession.d
em muitos sistemas e ssh-agent
também limpará a variável LD_PRELOAD
do ambiente. Então, algo assim pode ser necessário:
# cat <<'EOT' >/etc/X11/Xsession.d/98-no_inc_size_hints
export LD_PRELOAD="$LD_PRELOAD /path/to/no_inc_size_hints.so"
case $STARTUP in
/usr/bin/ssh-agent*)
STARTUP="/usr/bin/ssh-agent env LD_PRELOAD=$LD_PRELOAD ${STARTUP#* }";;
esac
EOT
Possível patch para openbox-3.6.1
:
--- openbox/client.c~ 2018-10-06 08:34:25.615967414 +0300 +++ openbox/client.c 2018-10-06 08:34:28.916133702 +0300 @@ -1757,9 +1757,6 @@ void client_update_normal_hints(ObClient if (size.flags & PBaseSize) SIZE_SET(self->base_size, size.base_width, size.base_height); - if (size.flags & PResizeInc && size.width_inc && size.height_inc) - SIZE_SET(self->size_inc, size.width_inc, size.height_inc); - ob_debug("Normal hints: min size (%d %d) max size (%d %d)", self->min_size.width, self->min_size.height, self->max_size.width, self->max_size.height);
e para rxvt-unicode-9.22
:
--- src/main.C~ 2018-10-06 08:33:08.580085731 +0300 +++ src/main.C 2018-10-06 08:33:37.549545455 +0300 @@ -657,7 +657,7 @@ rxvt_term::window_calc (unsigned int new unsigned int w, h; unsigned int max_width, max_height; - szHint.flags = PMinSize | PResizeInc | PBaseSize | PWinGravity; + szHint.flags = PMinSize | PBaseSize | PWinGravity; szHint.win_gravity = NorthWestGravity; /* szHint.min_aspect.x = szHint.min_aspect.y = 1; */ @@ -1073,7 +1073,7 @@ rxvt_term::resize_all_windows (unsigned { szHint.flags &= ~(PBaseSize | PResizeInc); XSetWMNormalHints (dpy, parent, &szHint); - szHint.flags |= PBaseSize | PResizeInc; + szHint.flags |= PBaseSize; } if (!ignoreparent)
Ambos são contra as versões do debian 9.5; eles só se aplicam com patch -l
- eu não sei como conseguir essa maldita coisa para preservar as abas.