Bug 5420 - xscreensaver не запускается
Summary: xscreensaver не запускается
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: xorg-x11-libs (show other bugs)
Version: unstable
Hardware: all Linux
: P2 major
Assignee: Valery Inozemtsev
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-10-29 11:57 MSD by Renat Sabitov
Modified: 2012-03-16 13:57 MSK (History)
0 users

See Also:


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

Note You need to log in before you can comment on or make changes to this bug.
Description Renat Sabitov 2004-10-29 11:57:12 MSD
$ 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 Renat Sabitov 2004-10-29 11:58:00 MSD
Created attachment 624 [details]
xorg.conf
Comment 2 Renat Sabitov 2004-10-29 12:22:25 MSD
В свете того что xlockmore не собирается в сизифе, приоритет этой ошибки высок. 
Comment 3 Sir Raorn 2004-10-29 13:44:00 MSD
Не подтверждается. xorg-x11-server-6.8.1-alt11, xscreensaver-4.18-alt2
Comment 4 Renat Sabitov 2004-11-01 10:54:40 MSK
Created attachment 628 [details]
лог gdb

У меня те же версии. Прилагаю лог gdb сессии.
Comment 5 Sir Raorn 2004-11-01 11:07:26 MSK
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 Renat Sabitov 2004-11-01 11:33:01 MSK
$ 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 Renat Sabitov 2004-11-01 11:34:11 MSK
Created attachment 629 [details]
.xscreensaver
Comment 8 Sir Raorn 2004-11-01 11:51:34 MSK
Ещё хочу вывод xset q:

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

Зпускать xscreensaver оба раза с -verbose и сказать, видны ли строки насчёт
"disabling server builtin screensaver" и xset в stderr.
Comment 9 Sir Raorn 2004-11-01 12:07:44 MSK
Охохо...  Ужыс какой, 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 Sir Raorn 2004-11-01 12:31:40 MSK
Ну вот оно:

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 Valery Inozemtsev 2004-12-15 17:58:49 MSK
полагаю этого будет достаточно
--- 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 Sir Raorn 2004-12-15 18:06:32 MSK
(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 Valery Inozemtsev 2004-12-15 18:13:19 MSK
в таком случае я закрываю быгу как инвалид. как определитесь что фиксить делайте
reopen
Comment 14 Sir Raorn 2004-12-15 18:45:41 MSK
Я думаю, что стОит перевесить эту багу в XOrg'овскую багзиллу.  Пусть они сами
думаю что и где фиксить.

У кого в этом смысле кунг-фу сильнее? (кто вешать будет?)
Comment 15 Valery Inozemtsev 2004-12-15 18:55:39 MSK
у меня с ангельским нелады... bugs.freedesktop.org, компонент xorg
Comment 17 Valery Inozemtsev 2004-12-15 19:14:30 MSK
замечательно. ребята там вменяемые, исправят быстро