On Sun, Jun 19, 2005 at 02:58:13AM +0400, Alexey Tourbin wrote: > On Sun, Jun 19, 2005 at 02:10:26AM +0400, Alexey Tourbin wrote: > > On Sat, Jun 18, 2005 at 08:36:36PM +0400, Alexey Tourbin wrote: > > > Под Xvfb пока не работает, не знаю точно почему. :( > > > > Под Xvfb не работает XKeysymToKeycode() -- возвращает 0. > > Это в процессе запроса на нажатие Alt (keysym=65513). > > $ cat xtest.c > #include > #include > #include > int main() > { > Display *display = XOpenDisplay(NULL); > if (!display) > return 1; > KeyCode kc = XKeysymToKeycode(display, XK_Alt_L); > printf("keycode=%d\n", kc); > return 0; > } > $ gcc -I/usr/X11R6/include -L/usr/X11R6/lib xtest.c -lX11 > $ DISPLAY=:0 ./a.out > keycode=64 > $ xvfb-run -a ./a.out > xauth: creating new authority file /home/at/.Xauthority > keycode=0 > $ > > У кого-нибудь воспроизводится? Any ideas? Проблема решилась так: --- X11-GUITest-0.20/GUITest.xs- 2004-01-16 23:41:42 +0000 +++ X11-GUITest-0.20/GUITest.xs 2005-07-13 01:35:14 +0000 @@ -213,6 +213,15 @@ return( GetKeySym(key, sym) ); } +/* Xvfb lacks XK_Alt_L; fall back to XK_Meta_L */ +#define XKeysymToKeycode(display, sym) \ +({ Display *d = (display); KeySym s = (sym); \ + KeyCode kc = (XKeysymToKeycode)(d, s); \ + if (kc == 0 && s == XK_Alt_L) \ + kc = (XKeysymToKeycode)(d, XK_Meta_L); \ + kc; \ +}) + /* Function: PressKeyImp * Description: Presses the key for the specified keysym. Lower-level * implementation. > NB: НЕ ЗАПУСКАЙТЕ xfvb-run в домашнем каталоге.