Looking at how xkbbell achieves the beep I found it does: (in xkbutils/xkbbell.c) 204 else ok= XkbBell(dpy,win,volume,nameAtom);
Now, xterm has this code: 811 void 812 xtermBell(XtermWidget xw, int which, int percent) 813 { 814 TScreen *screen = TScreenOf(xw); 815 #if defined(HAVE_XKB_BELL_EXT) 816 Atom tony = AtomBell(xw, which); 817 if (tony != None) { 818 XkbBell(screen->display, VShellWindow, percent, tony); 819 } else 820 #endif 821 XBell(screen->display, percent); 822 } On checking, HAVE_XKB_BELL_EXT is indeed set. However AtomBell() is returning 'None'. But wait a moment, looking back at xkbbell it defaults this to 'None' as well: 43 static Atom nameAtom = None; and the only way that changes is if it passes this test: 198 if (bellName!=NULL) 199 nameAtom = XInternAtom(dpy,bellName,0); which it doesn't unless you specify a bell with 'xkbbell <bellname>'. So with just 'xkbbell' working this means that passing a nameAtom of 'None' to XkbBell() is perfectly fine, so why is xterm deciding it's a bad thing ? Thus just commenting out lines 817 and 819 causes xterm beeping to start working again. Obviously you'd actually want to make it something more like: 811 void 812 xtermBell(XtermWidget xw, int which, int percent) 813 { 814 TScreen *screen = TScreenOf(xw); 815 #if defined(HAVE_XKB_BELL_EXT) 816 Atom tony = AtomBell(xw, which); 817 XkbBell(screen->display, VShellWindow, percent, tony); 818 #else 819 XBell(screen->display, percent); 820 #endif 821 } So that you only issue one of XkbBell() or XBell(). Note AtomBell() always sets its return value to a default of 'None', so there shouldn't be a need for a NULL pointer check or anysuch there. I may be wrong about not wanting to issue both, X11 experts can check that. XkbBell(3) has nothing to say about the Atom name 'None' being special, but it does say it can be NULL (but not what happens if it is). It does also state: If a compatible keyboard extension isn't present in the X server, XkbBell calls XBell with the specified display and percent, and returns False. Otherwise, XkbBell calls XkbDeviceBell with the specified disâ play, window, percent, and name, a device_spec of XkbUseCoreKbd, a bell_class of XkbDfltXIClass, and a bell_id of XkbDfltXIId, and returns True. which seems to mean that my change as above to not try both XkbBell() and XBell() is correct, as the former will fall back to the latter if needs be anyway. -- - Athanasius = Athanasius(at)miggy.org / http://www.miggy.org/ Finger athan(at)fysh.org for PGP key "And it's me who is my enemy. Me who beats me up. Me who makes the monsters. Me who strips my confidence." Paula Cole - ME -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20100214112734.ga30...@miggy.org