grab a X server (was: chyba v Redhatu - prosba o pomoc)

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Čtvrtek Květen 31 11:24:42 CEST 2001


On Thu, 31 May 2001, Stanislav Meduna wrote:

> Pavel Kankovsky schrieb in Nachricht

In Nachricht? Mein Gott... :)

> >Grab provedeny X klientem by v zadnem pripade nemel zablokovat
> >veci jako Ctrl+Alt+Fn a Ctrl+Alt+Backspace.
> 
> IMHO nemas pravdu. Ono je tych grabov viac druhov a zvlast
> ten, ktory pouzivaju aj Motifovske menu widgety, je dost "agresivny".
> Mozem potvrdit, ze X server sa aj mne chova (a vzdy sa choval)
> tak, ze ak je tento grab aktivny, nefunguje ani Ctrl+Alt+Fn, ani
> Ctrl+Alt+Backspace a nechcem mlzit, ale obavam sa, ze ani
> SysRq (tu si ale isty nie som).

Zajimave...zda se, ze XGrabKeyboard i XGrabPointer dokaze skutecne
zablokovat Ctrl+Alt+neco. Coz je A) prekvapive, protoze tyhle veci jsou
osetrene velice hluboko ve vnitrnostech X serveru, B) dost diskutabilni
z hlediska toho, zda je to spravne, protoze se takhle chova jen ty dva,
ale treba ne uz XGrabServer (od ktereho by clovek ocekaval nejvetsi
agresivitu), a navic by to mohlo byt uzitecne pouze pro veci jako xlock
apod., ale nevsimnul jsem si, ze by to nejaka delala. Ale je mozne, ze
dost zalezi na parametrech -- ja jsem zkousel ty "nejdrsnejsi".

Ovsem SysRq snad uz mozne zablokovat nelze. Tak moc snad X server kecat
jadru do jeho zalezitosti nemuze.

> Ked budem mat cas, skusim napisat kratky program, ktory
> to checkne.

---snip---
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <X11/Xlib.h>

int
main(int argc, char **argv)
{
  Display *dpy;

  dpy = XOpenDisplay(NULL);
  if (!dpy) {
    fprintf(stderr, "oops\n");
    return 1;
  }
  if (argc <= 1 || !strcmp(argv[1], "server")) {
    fprintf(stderr, "Server grab\n");
    XGrabServer(dpy);
    XSync(dpy, False);
    sleep(10);
    XUngrabServer(dpy);
  }
  if (argc <= 1 || !strcmp(argv[1], "keyboard")) {
    fprintf(stderr, "Keyboard grab\n");
    XGrabKeyboard(dpy, DefaultRootWindow(dpy),
                  False, GrabModeSync, GrabModeSync, CurrentTime);
    XSync(dpy, False);
    sleep(10);
    XUngrabKeyboard(dpy, CurrentTime);
  }
  if (argc <= 1 || !strcmp(argv[1], "pointer")) {
    fprintf(stderr, "Pointer grab \n");
    XGrabPointer(dpy, DefaultRootWindow(dpy),
                 0, False, GrabModeSync, GrabModeSync,
                 None, None, CurrentTime);
    XSync(dpy, False);
    sleep(10);
    XUngrabPointer(dpy, CurrentTime);
  }
  fprintf(stderr, "hasta la vista\n");
  XCloseDisplay(dpy);
  return 0;
}
---snip---

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux