Subject: bin/11905: screenblank doesn't work well with wscons
To: None <gnats-bugs@gnats.netbsd.org>
From: Dave Huang <khym@bga.com>
List: netbsd-bugs
Date: 01/06/2001 12:09:16
>Number: 11905
>Category: bin
>Synopsis: screenblank doesn't work well with wscons
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: bin-bug-people
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sat Jan 06 12:09:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator: Dave Huang
>Release: NetBSD-current as of January 6, 2001
>Organization:
Name: Dave Huang | Mammal, mammal / their names are called /
INet: khym@bga.com | they raise a paw / the bat, the cat /
FurryMUCK: Dahan | dolphin and dog / koala bear and hog -- TMBG
Dahan: Hani G Y+C 25 Y++ L+++ W- C++ T++ A+ E+ S++ V++ F- Q+++ P+ B+ PA+ PL++
>Environment:
System: NetBSD pmac.metonymy.com 1.5Q NetBSD 1.5Q (PMAC) #13: Wed Jan 3 23:46:45 CST 2001 khym@pmac.metonymy.com:/usr/obj.macppc/PMAC macppc
Architecture: powerpc
Machine: macppc
>Description:
screenblank detects activity on the console by checking the
atime and mtime of /dev/wskbd0 and /dev/wsmouse0. However, unless
you're running X, those devices aren't open, and their times aren't
changing. When not in X, only ttyE0 is open, but screenblank considers
it a framebuffer device and doesn't check its times. So, if you run
screenblank, the screen will blank while you're in the middle of
typing something, and won't come back on.
>How-To-Repeat:
[Note: I've modified my sys/arch/macppc/dev/ofb.c to support
the WSDISPLAYIO_SVIDEO and GVIDEO ioctls that screenblank uses to turn
the screen on and off...]
Just turn on screenblank in /etc/rc.conf, wait at the login prompt for
10 minutes, watch the screen turn off, type stuff to attempt to login
and notice that the screen never comes back on.
>Fix:
How about checking the atime of framebuffer devices, but not the mtime?
Index: screenblank.c
===================================================================
RCS file: /cvsroot/basesrc/usr.sbin/screenblank/screenblank.c,v
retrieving revision 1.10
diff -u -r1.10 screenblank.c
--- screenblank.c 1999/06/06 03:35:36 1.10
+++ screenblank.c 2001/01/05 04:11:58
@@ -226,16 +226,14 @@
change = 0;
for (dsp = ds_list.lh_first; dsp != NULL;
dsp = dsp->ds_link.le_next) {
- /* Don't check framebuffers. */
- if (dsp->ds_isfb)
- continue;
if (stat(dsp->ds_path, &st) < 0)
err(1, "stat: %s", dsp->ds_path);
if (st.st_atime > dsp->ds_atime) {
change = 1;
dsp->ds_atime = st.st_atime;
}
- if (st.st_mtime > dsp->ds_mtime) {
+ /* Don't check a framebuffer's mtime. */
+ if (!dsp->ds_isfb && (st.st_mtime > dsp->ds_mtime)) {
change = 1;
dsp->ds_mtime = st.st_mtime;
}
>Release-Note:
>Audit-Trail:
>Unformatted: