[PATCH] vc bell config

Previous thread: [code] Unlimited partitions, a try by Jan Engelhardt on Friday, October 5, 2007 - 7:50 am. (9 messages)

Next thread: [Patch]Documentation/vm/slabinfo.c: clean up this code by WANG Cong on Friday, October 5, 2007 - 8:46 am. (3 messages)
To: Andrew Morton <akpm@...>
Cc: Linux Kernel Mailing List <linux-kernel@...>, <adaplas@...>
Date: Friday, October 5, 2007 - 7:55 am

It is already possible to deactivate the vc bell on a per-tty basis,
by using echo -en "\e[11;0]", but this is reset on reset(1).

This adds a sysfs parameter to globally control the vc bell, as well
as sysfs parameters for default pitch and duration.

Signed-off-by: Jan Engelhardt <jengelh@gmx.de>

---
drivers/char/vt.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)

Index: linux-2.6.23/drivers/char/vt.c
===================================================================
--- linux-2.6.23.orig/drivers/char/vt.c
+++ linux-2.6.23/drivers/char/vt.c
@@ -134,8 +134,12 @@ const struct consw *conswitchp;
/*
* Here is the default bell parameters: 750HZ, 1/8th of a second
*/
-#define DEFAULT_BELL_PITCH 750
-#define DEFAULT_BELL_DURATION (HZ/8)
+static unsigned int default_bell_pitch = 750;
+static unsigned int default_bell_duration = HZ / 8;
+static unsigned int vc_bell_enabled = true;
+module_param_named(bell_pitch, default_bell_pitch, uint, S_IRUGO | S_IWUSR);
+module_param_named(bell_duration, default_bell_duration, uint, S_IRUGO | S_IWUSR);
+module_param_named(bell_enabled, vc_bell_enabled, uint, S_IRUGO | S_IWUSR);

struct vc vc_cons [MAX_NR_CONSOLES];

@@ -1401,14 +1405,14 @@ static void setterm_command(struct vc_da
if (vc->vc_npar >= 1)
vc->vc_bell_pitch = vc->vc_par[1];
else
- vc->vc_bell_pitch = DEFAULT_BELL_PITCH;
+ vc->vc_bell_pitch = default_bell_pitch;
break;
case 11: /* set bell duration in msec */
if (vc->vc_npar >= 1)
vc->vc_bell_duration = (vc->vc_par[1] < 2000) ?
vc->vc_par[1] * HZ / 1000 : 0;
else
- vc->vc_bell_duration = DEFAULT_BELL_DURATION;
+ vc->vc_bell_duration = default_bell_duration;
break;
case 12: /* bring specified console to the front */
if (vc->vc_par[1] >= 1 && vc_cons_allocated(vc->vc_par[1] - 1))
@@ -1554,8 +1558,8 @@ static void reset_terminal(struct vc_dat
vc->vc_tab_s...

To: Jan Engelhardt <jengelh@...>
Cc: Andrew Morton <akpm@...>, Linux Kernel Mailing List <linux-kernel@...>, <adaplas@...>
Date: Thursday, October 11, 2007 - 2:11 pm

There are more parameters that should be set during reset... like
cursor size and color, palette, .... What about /sys/.../string_to_interpret
_on_reset ?
Pavel

--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
-

To: Pavel Machek <pavel@...>
Cc: Andrew Morton <akpm@...>, Linux Kernel Mailing List <linux-kernel@...>, <adaplas@...>
Date: Wednesday, October 17, 2007 - 12:35 pm

On reset(1), cursor size, palette, and bell parameters _do_ get reset
to the defaults. Some defaults may already be changed by the user,
like palette or default_utf8.

Bell configuration is currently not one of them so, should a program
decide to reset the tty, or should it happen that your output is
garbled (forcing you to do reset), some settings change back to
"unwanted defaults".
-

To: Jan Engelhardt <jengelh@...>
Cc: Andrew Morton <akpm@...>, Linux Kernel Mailing List <linux-kernel@...>, <adaplas@...>
Date: Wednesday, October 17, 2007 - 6:21 pm

Ok, and I'm suggesting general method for the "unwanted defaults"
problem. Just have a /sys/.../terminal_init_string.

During reset, let console code interpret terminal_init_string, to set
_wanted_ defaults. So you'd do:

echo -en "\e[11;0]" > /sys/.../terminal_init_string... and I'd do
something similar with softcursor settings. (Which are currently reset
to compiled-in defaults, and that is "unwanted defaults" to me).
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
-

To: Jan Engelhardt <jengelh@...>
Cc: <linux-kernel@...>, <adaplas@...>
Date: Friday, October 5, 2007 - 8:00 pm

On Fri, 5 Oct 2007 13:55:52 +0200 (CEST)

Why do we need this? To fix the stupid-app-makes-my-box-beep problem, I
guess. Is there no other way of suppressing the beep? (no jokes about wire

It is inapt to call these default_X. Because once they have been altered
by the user, they aren't defaults any more.

They should be just bell_pitch and bell_duration.

-

To: Andrew Morton <akpm@...>
Cc: <linux-kernel@...>, <adaplas@...>
Date: Saturday, October 6, 2007 - 6:10 am

The user has a number of choices:
- rmmod pcspkr, to disable all beeps (including X)
- vt.bell_enabled=0, to disable beeps on all VCs, but not X
- vt.default_bell_pitch=400, to give VC the frequency used in X

They are still default, as in: they will define the initial
pitch/duration when a tty is created, or when the tty is reset.

If they were just 'bell_pitch', one culd assume that changing it
changes the pitch of all ttys, which it does not. Whether it's good
or not that the vc subsytem has per-tty pitches is a different story.

Well, that's what I am thinking about it.
-

To: Andrew Morton <akpm@...>
Cc: Jan Engelhardt <jengelh@...>, <linux-kernel@...>, <adaplas@...>
Date: Saturday, October 6, 2007 - 5:55 am

On Fri, 5 Oct 2007 17:00:11 -0700

man setterm

See -blength and -bfreq

Alan
-

To: Alan Cox <alan@...>
Cc: Andrew Morton <akpm@...>, <linux-kernel@...>, <adaplas@...>
Date: Saturday, October 6, 2007 - 6:02 am

Only sets length and freq of current tty, and only until `reset`.
It's equivalent to \e[10;x] and \e[11;x].
-

Previous thread: [code] Unlimited partitions, a try by Jan Engelhardt on Friday, October 5, 2007 - 7:50 am. (9 messages)

Next thread: [Patch]Documentation/vm/slabinfo.c: clean up this code by WANG Cong on Friday, October 5, 2007 - 8:46 am. (3 messages)