Here are a couple of patches to apmd (as of FreeBSD 4.4-STABLE) to fix a bug and add a feature necessary on my Vaio PCG-XG9.
The fix is to handle properly termination signals (currently ignored). The feature is the -s option that lets you fake POWERSTATECHANGE when the BIOS doesn't report it. This enables you to do fancy things like reducing the LCD backlight brightness when you unplug the power supply. Something like this in apmd.conf: apm_event POWERSTATECHANGE { exec "/bin/sh /usr/local/bin/my-preferred-power-state-change-script"; } Here is the patch: --- /usr/home/wcp/tmp/apmd/apmd.c Fri Oct 12 20:22:34 2001 +++ /usr/src/usr.sbin/apmd/apmd.c Sat Oct 13 14:58:35 2001 @@ -55,7 +55,7 @@ extern int yyparse(void); int debug_level = 0; -int verbose = 0; +int verbose = 0, soft_power_state_change = 0; const char *apmd_configfile = APMD_CONFIGFILE; const char *apmd_pidfile = APMD_PIDFILE; int apmctl_fd = -1, apmnorm_fd = -1; @@ -464,7 +464,6 @@ int proc_signal(int fd) { - int rc = -1; int sig; while (read(fd, &sig, sizeof sig) == sizeof sig) { @@ -476,8 +475,7 @@ break; case SIGTERM: syslog(LOG_NOTICE, "going down on signal %d", sig); - rc = 1; - goto out; + return -1; case SIGCHLD: wait_child(); break; @@ -486,9 +484,7 @@ break; } } - rc = 0; - out: - return rc; + return 0; } void proc_apmevent(int fd) @@ -548,6 +544,8 @@ * the event-caught state. */ if (last_state != AC_POWER_STATE) { + if (soft_power_state_change && fork() == 0) + exit(exec_event_cmd(&events[PMEV_POWERSTATECHANGE])); last_state = AC_POWER_STATE; for (p = battery_watch_list ; p!=NULL ; p = p -> next) p->done = 0; @@ -642,7 +640,7 @@ char *prog; int logopt = LOG_NDELAY | LOG_PID; - while ((ch = getopt(ac, av, "df:v")) != EOF) { + while ((ch = getopt(ac, av, "df:vs")) != EOF) { switch (ch) { case 'd': daemonize = 0; @@ -653,6 +651,9 @@ break; case 'v': verbose = 1; + break; + case 's': + soft_power_state_change = 1; break; default: (void) err(1, "unknown option `%c'", ch); -- walter pelissero http://www.pelissero.org To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-hackers" in the body of the message