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