Bug 5420 - xscreensaver не запускается
: xscreensaver не запускается
Status: CLOSED NOTABUG
: Sisyphus
(All bugs in Sisyphus/xorg-x11-libs)
: unstable
: all Linux
: P2 major
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2004-10-29 11:57 by
Modified: 2012-03-16 13:57 (History)


Attachments
xorg.conf (5.71 KB, text/plain)
2004-10-29 11:58, Renat Sabitov
no flags Details
лог gdb (4.18 KB, text/plain)
2004-11-01 10:54, Renat Sabitov
no flags Details
.xscreensaver (3.76 KB, text/plain)
2004-11-01 11:34, Renat Sabitov
no flags Details


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2004-10-29 11:57:12
$ xscreensaver
  
##############################################################################
  
xscreensaver: 11:33:39: X Error!  PLEASE REPORT THIS BUG.
xscreensaver: 11:33:39: screen 0/0: 0x8e, 0x0, 0x1400001

##############################################################################

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  107 (X_SetScreenSaver)
  Value in failed request:  0xffffa8c0
  Serial number of failed request:  205
  Current serial number in output stream:  206

##############################################################################

    If at all possible, please re-run xscreensaver with the command
    line arguments `-sync -verbose -no-capture', and reproduce this
    bug.  That will cause xscreensaver to dump a `core' file to the
    current directory.  Please include the stack trace from that core
    file in your bug report.  *DO NOT* mail the core file itself!
    That won't work.

    http://www.jwz.org/xscreensaver/bugs.html explains how to create
    the most useful bug reports, and how to examine core files.
  
    The more information you can provide, the better.  But please
    report this bug, regardless!
  
##############################################################################
------- Comment #1 From 2004-10-29 11:58:00 -------
Created an attachment (id=624) [details]
xorg.conf
------- Comment #2 From 2004-10-29 12:22:25 -------
В свете того что xlockmore не собирается в сизифе, приоритет этой ошибки высок. 
------- Comment #3 From 2004-10-29 13:44:00 -------
Не подтверждается. xorg-x11-server-6.8.1-alt11, xscreensaver-4.18-alt2
------- Comment #4 From 2004-11-01 10:54:40 -------
Created an attachment (id=628) [details]
лог gdb

У меня те же версии. Прилагаю лог gdb сессии. 
------- Comment #5 From 2004-11-01 11:07:26 -------
xscreensaver: 10:52:23: disabling server builtin screensaver:
xscreensaver: 10:52:23:  (xset s 43200 0; xset s noblank; xset s expose)

Пропробуйте в терминале выполнить последовательность команд:
xset s 43200 0; xset s noblank; xset s expose

Также попробуйте временно убрать ~/.xscreensaver, если проблема решилась,
прикрепите конфиг к ошибке.

Что говорит rpm -V xscreensaver ?
------- Comment #6 From 2004-11-01 11:33:01 -------
$ xset s 43200 0; xset s noblank; xset s expose
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  107 (X_SetScreenSaver)
  Value in failed request:  0xffffa8c0
  Serial number of failed request:  8
  Current serial number in output stream:  9

$ rpm -V xscreensaver
..?..... c /etc/pam.d/xscreensaver
..?.....   /usr/X11R6/bin/xscreensaver

переименование .xscreensaver помогло. 
Сейчас прикреплю
------- Comment #7 From 2004-11-01 11:34:11 -------
Created an attachment (id=629) [details]
.xscreensaver
------- Comment #8 From 2004-11-01 11:51:34 -------
Ещё хочу вывод xset q:

1. До любой попытки запуска xscreensaver
2. После _удачного_ запуска xscreensaver (без конфига)
3. После неудачного запуска xscreensaver

Зпускать xscreensaver оба раза с -verbose и сказать, видны ли строки насчёт
"disabling server builtin screensaver" и xset в stderr.
------- Comment #9 From 2004-11-01 12:07:44 -------
Охохо...  Ужыс какой, xscreensaver не виноват:

Из мана:
SYNTAX
       XSetScreenSaver(display, timeout, interval, prefer_blanking,
       allow_exposures)
             Display *display;
             int timeout, interval;
             int prefer_blanking;
             int allow_exposures;

Из кода:
  int desired_server_timeout, desired_server_interval;
[...]
      XSetScreenSaver (si->dpy,
                       desired_server_timeout, desired_server_interval,
                       desired_prefer_blank, desired_allow_exp);

Из лога:
xscreensaver: 10:52:23: disabling server builtin screensaver:
xscreensaver: 10:52:23:  (xset s 43200 0; xset s noblank; xset s expose)

43200 - значение desired_server_timeout (параметр timeout)

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  107 (X_SetScreenSaver)
  Value in failed request:  0xffffa8c0

Значение 0xffffa8c0 соответсвует числу 43200, которое пытается обрабытываться
как signed short int с преобразованием в int.

Ренат, временным решением Вашей проблемы может быть указание таймаута меньше
девяти часов (32767 секунд).

Перевешиваю баг на xorg-X11-libs...
------- Comment #10 From 2004-11-01 12:31:40 -------
Ну вот оно:

xc/include/Xproto.h:
typedef struct {
    CARD8 reqType;
    BYTE pad;
    CARD16 length B16;
    INT16 timeout B16, interval B16;
    BYTE preferBlank, allowExpose;
    CARD16 pad2 B16;
} xSetScreenSaverReq;

xc/lib/X11/SetSSaver.c:
int
XSetScreenSaver(dpy, timeout, interval, prefer_blank, allow_exp)
    register Display *dpy;
    int timeout, interval, prefer_blank, allow_exp;

{
    register xSetScreenSaverReq *req;

    LockDisplay(dpy);
    GetReq(SetScreenSaver, req);
    req->timeout = timeout;
    req->interval = interval;
    req->preferBlank = prefer_blank;
    req->allowExpose = allow_exp;
    UnlockDisplay(dpy);
    SyncHandle();
    return 1;
}

int vs. INT16...  Определение INT16 и B16 находится в xc/include/Xmd.h
------- Comment #11 From 2004-12-15 17:58:49 -------
полагаю этого будет достаточно
--- xc/lib/X11/SetSSaver.c.orig 2004-12-15 17:56:28 +0300
+++ xc/lib/X11/SetSSaver.c      2004-12-15 17:54:14 +0300
@@ -31,7 +31,7 @@
 int
 XSetScreenSaver(dpy, timeout, interval, prefer_blank, allow_exp)
     register Display *dpy;
-    int timeout, interval, prefer_blank, allow_exp;
+    short signed int timeout, interval, prefer_blank, allow_exp;

 {
     register xSetScreenSaverReq *req;
------- Comment #12 From 2004-12-15 18:06:32 -------
(In reply to comment #11)
> полагаю этого будет достаточно
> -    int timeout, interval, prefer_blank, allow_exp;
> +    short signed int timeout, interval, prefer_blank, allow_exp;

Нет.  Есть мнение, что на эту функцию ссылаются некоторое количество стандартов
и менять тип передаваемых аргументов будет не очень хорошо.  Вместо этого можно
в самом XSetScreenSaver устроить sanity check для переданных данных (например по
& 0x7FFF)...
------- Comment #13 From 2004-12-15 18:13:19 -------
в таком случае я закрываю быгу как инвалид. как определитесь что фиксить
делайте
reopen
------- Comment #14 From 2004-12-15 18:45:41 -------
Я думаю, что стОит перевесить эту багу в XOrg'овскую багзиллу.  Пусть они сами
думаю что и где фиксить.

У кого в этом смысле кунг-фу сильнее? (кто вешать будет?)
------- Comment #15 From 2004-12-15 18:55:39 -------
у меня с ангельским нелады... bugs.freedesktop.org, компонент xorg
------- Comment #16 From 2004-12-15 19:09:32 -------
https://bugs.freedesktop.org/show_bug.cgi?id=2081
------- Comment #17 From 2004-12-15 19:14:30 -------
замечательно. ребята там вменяемые, исправят быстро