1d50a71bdSMitsuru IWASAKIFreeBSD apmd Package Release Notes (19990711 version) 2d50a71bdSMitsuru IWASAKI 3d50a71bdSMitsuru IWASAKI1. What is "apmd"? 4d50a71bdSMitsuru IWASAKI================== 5d50a71bdSMitsuru IWASAKI 6d50a71bdSMitsuru IWASAKIThe apmd package provides a means of handling various APM events from 7d50a71bdSMitsuru IWASAKIuserland code. Using apmd.conf, the apmd(8) configuration file, you 8d50a71bdSMitsuru IWASAKIcan select the APM events to be handled from userland and specify the 9d50a71bdSMitsuru IWASAKIcommands for a given event, allowing APM behaviour to be configured 10d50a71bdSMitsuru IWASAKIflexibly. 11d50a71bdSMitsuru IWASAKI 12d50a71bdSMitsuru IWASAKI 13d50a71bdSMitsuru IWASAKI2. How to install the apmd package 14d50a71bdSMitsuru IWASAKI================================== 15d50a71bdSMitsuru IWASAKI 16d50a71bdSMitsuru IWASAKI2.1 Making the apmd control device file 17d50a71bdSMitsuru IWASAKI--------------------------------------- 18d50a71bdSMitsuru IWASAKI 19d50a71bdSMitsuru IWASAKIapmd(8) uses the new special device file /dev/apmctl. This should be 20d50a71bdSMitsuru IWASAKIcreated as follows: 21d50a71bdSMitsuru IWASAKI 22d50a71bdSMitsuru IWASAKI# cd /dev 23d50a71bdSMitsuru IWASAKI# mknod apmctl c 39 8 24d50a71bdSMitsuru IWASAKI 25d50a71bdSMitsuru IWASAKI2.2 Applying the kernel patch and building a new kernel 26d50a71bdSMitsuru IWASAKI------------------------------------------------------- 27d50a71bdSMitsuru IWASAKI 28d50a71bdSMitsuru IWASAKIThe next step is to apply the patch against the sys source tree. 29d50a71bdSMitsuru IWASAKIGo to the source directory (eg. /usr/src/ or /usr/PAO3/src/) and run 30d50a71bdSMitsuru IWASAKIthe patch command as follows: 31d50a71bdSMitsuru IWASAKI 32d50a71bdSMitsuru IWASAKI# gzip -cd [somewhere]/apmd-sys-R320.diff | patch 33d50a71bdSMitsuru IWASAKI 34d50a71bdSMitsuru IWASAKIFor PAO3 users, the patch file name would be apmd-sys-PAO3.diff 35d50a71bdSMitsuru IWASAKIinstead of apmd-sys-R320.diff. After this step has completed 36d50a71bdSMitsuru IWASAKIsuccessfully, build and install a new kernel and reboot your system. 37d50a71bdSMitsuru IWASAKI 38d50a71bdSMitsuru IWASAKI2.3 Making the apmd program 39d50a71bdSMitsuru IWASAKI--------------------------- 40d50a71bdSMitsuru IWASAKI 41d50a71bdSMitsuru IWASAKIGo to src/usr.sbin/ and extract the apmd tarball as follows: 42d50a71bdSMitsuru IWASAKI 43d50a71bdSMitsuru IWASAKI# tar xzpvf [somewhere]/apmd-usr.sbin.tar.gz 44d50a71bdSMitsuru IWASAKI 45d50a71bdSMitsuru IWASAKIBefore doing a make all, you need to copy apm_bios.h in the sys source 46d50a71bdSMitsuru IWASAKItree to /usr/include/machine/ first: 47d50a71bdSMitsuru IWASAKI 48d50a71bdSMitsuru IWASAKI# cp /sys/i386/include/apm_bios.h /usr/include/machine/ 49d50a71bdSMitsuru IWASAKI 50d50a71bdSMitsuru IWASAKIThen do the build and install steps in the apmd directory: 51d50a71bdSMitsuru IWASAKI 52d50a71bdSMitsuru IWASAKI# cd src/usr.sbin/apmd 53d50a71bdSMitsuru IWASAKI# make depend all install 54d50a71bdSMitsuru IWASAKI 55d50a71bdSMitsuru IWASAKI2.4 Setting up the configuration file and userland script 56d50a71bdSMitsuru IWASAKI--------------------------------------------------------- 57d50a71bdSMitsuru IWASAKI 58d50a71bdSMitsuru IWASAKIIn src/usr.sbin/apm/etc/ there are example configuration and userland 59d50a71bdSMitsuru IWASAKIscript files which are invoked automatically when the APM BIOS informs 60d50a71bdSMitsuru IWASAKIapmd of an event, such as suspend request. Copy these files to 61d50a71bdSMitsuru IWASAKI/etc/ as follows: 62d50a71bdSMitsuru IWASAKI 63d50a71bdSMitsuru IWASAKI# cp src/usr.sbin/apm/etc/* /etc/ 64d50a71bdSMitsuru IWASAKI 65d50a71bdSMitsuru IWASAKI 66d50a71bdSMitsuru IWASAKI3. Running the apmd daemon program 67d50a71bdSMitsuru IWASAKI================================== 68d50a71bdSMitsuru IWASAKI 69d50a71bdSMitsuru IWASAKITo run apmd(8) in background mode, simply type ``apmd''. 70d50a71bdSMitsuru IWASAKI 71d50a71bdSMitsuru IWASAKI# apmd 72d50a71bdSMitsuru IWASAKI 73d50a71bdSMitsuru IWASAKITo make a running apmd reload /etc/apmd.conf, send a SIGHUP signal to 74d50a71bdSMitsuru IWASAKIthe apmd(8) process. 75d50a71bdSMitsuru IWASAKI 76d50a71bdSMitsuru IWASAKI# kill -HUP [apmd pid] 77d50a71bdSMitsuru IWASAKIor 78d50a71bdSMitsuru IWASAKI# killall -HUP apmd 79d50a71bdSMitsuru IWASAKI 80d50a71bdSMitsuru IWASAKIapmd has some command line options. For the details, please 81d50a71bdSMitsuru IWASAKIrefer to the manpage of apmd. 82d50a71bdSMitsuru IWASAKI 83d50a71bdSMitsuru IWASAKI4. Configuration file 84d50a71bdSMitsuru IWASAKI===================== 85d50a71bdSMitsuru IWASAKI 86d50a71bdSMitsuru IWASAKIThe structure of the apmd configuration file is quite simple. For 87d50a71bdSMitsuru IWASAKIexample: 88d50a71bdSMitsuru IWASAKI 89d50a71bdSMitsuru IWASAKIapm_event SUSPENDREQ { 90d50a71bdSMitsuru IWASAKI exec "sync && sync && sync"; 91d50a71bdSMitsuru IWASAKI exec "sleep 1"; 92d50a71bdSMitsuru IWASAKI exec "zzz"; 93d50a71bdSMitsuru IWASAKI} 94d50a71bdSMitsuru IWASAKI 95*cd0788e1SUlrich SpörleinWill cause apmd to receive the APM event SUSPENDREQ (which may be 96d50a71bdSMitsuru IWASAKIposted by an LCD close), run the sync command 3 times and wait for a 97d50a71bdSMitsuru IWASAKIwhile, then execute zzz (apm -z) to put the system in the suspend 98d50a71bdSMitsuru IWASAKIstate. 99d50a71bdSMitsuru IWASAKI 100d50a71bdSMitsuru IWASAKI4.1 The apm_event keyword 101d50a71bdSMitsuru IWASAKI------------------------- 102d50a71bdSMitsuru IWASAKI`apm_event' is the keyword which indicates the start of configuration for 103d50a71bdSMitsuru IWASAKIeach events. 104d50a71bdSMitsuru IWASAKI 105d50a71bdSMitsuru IWASAKI4.2 APM events 106d50a71bdSMitsuru IWASAKI-------------- 107d50a71bdSMitsuru IWASAKI 108d50a71bdSMitsuru IWASAKIIf you wish to execute the same commands for different events, the 109d50a71bdSMitsuru IWASAKIevent names should be delimited by a comma. The following are valid 110d50a71bdSMitsuru IWASAKIevent names: 111d50a71bdSMitsuru IWASAKI 112d50a71bdSMitsuru IWASAKIo Events ignored by the kernel if apmd is running: 113d50a71bdSMitsuru IWASAKI 114d50a71bdSMitsuru IWASAKISTANDBYREQ 115d50a71bdSMitsuru IWASAKISUSPENDREQ 116d50a71bdSMitsuru IWASAKIUSERSUSPENDREQ 117d50a71bdSMitsuru IWASAKIBATTERYLOW 118d50a71bdSMitsuru IWASAKI 119d50a71bdSMitsuru IWASAKIo Events passed to apmd after kernel handling: 120d50a71bdSMitsuru IWASAKI 121d50a71bdSMitsuru IWASAKINORMRESUME 122d50a71bdSMitsuru IWASAKICRITRESUME 123d50a71bdSMitsuru IWASAKISTANDBYRESUME 124d50a71bdSMitsuru IWASAKIPOWERSTATECHANGE 125d50a71bdSMitsuru IWASAKIUPDATETIME 126d50a71bdSMitsuru IWASAKI 127d50a71bdSMitsuru IWASAKI 128d50a71bdSMitsuru IWASAKIOther events will not be sent to apmd. 129d50a71bdSMitsuru IWASAKI 130d50a71bdSMitsuru IWASAKI4.3 command line syntax 131d50a71bdSMitsuru IWASAKI----------------------- 132d50a71bdSMitsuru IWASAKI 133*cd0788e1SUlrich SpörleinIn the example above, the three lines beginning with `exec' are commands 134d50a71bdSMitsuru IWASAKIfor the event. Each line should be terminated with a semicolon. The 135d50a71bdSMitsuru IWASAKIcommand list for the event should be enclosed by `{' and `}'. apmd(8) 136d50a71bdSMitsuru IWASAKIuses /bin/sh for double-quotation enclosed command execution, just as 137d50a71bdSMitsuru IWASAKIwith system(3). Each command is executed in order until the end of 138d50a71bdSMitsuru IWASAKIthe list is reached or a command finishes with a non-zero status code. 139d50a71bdSMitsuru IWASAKIapmd(8) will report any failed command's status code via syslog(3) 140d50a71bdSMitsuru IWASAKIand will then reject the request event posted by APM BIOS. 141d50a71bdSMitsuru IWASAKI 142d50a71bdSMitsuru IWASAKI4.4 Built-in functions 143d50a71bdSMitsuru IWASAKI---------------------- 144d50a71bdSMitsuru IWASAKI 145d50a71bdSMitsuru IWASAKIYou can also specify apmd built-in functions instead of command lines. 146d50a71bdSMitsuru IWASAKIA built-in function name should be terminated with a semicolon, just as 147d50a71bdSMitsuru IWASAKIwith a command line. 148d50a71bdSMitsuru IWASAKIThe following built-in functions are currently supported: 149d50a71bdSMitsuru IWASAKI 150d50a71bdSMitsuru IWASAKIo reject; 151d50a71bdSMitsuru IWASAKI 152d50a71bdSMitsuru IWASAKI Reject last request posted by the APM BIOS. This can be used to reject a 153d50a71bdSMitsuru IWASAKI SUSPEND request when the LCD is closed and put the system in a STANDBY 154d50a71bdSMitsuru IWASAKI state instead. 155d50a71bdSMitsuru IWASAKI 156d50a71bdSMitsuru IWASAKI 157d50a71bdSMitsuru IWASAKI 158d50a71bdSMitsuru IWASAKI5. EXAMPLES 159d50a71bdSMitsuru IWASAKI=========== 160d50a71bdSMitsuru IWASAKI 161d50a71bdSMitsuru IWASAKISample configuration commands include: 162d50a71bdSMitsuru IWASAKI 163d50a71bdSMitsuru IWASAKIapm_event SUSPENDREQ { 164d50a71bdSMitsuru IWASAKI exec "/etc/rc.suspend"; 165d50a71bdSMitsuru IWASAKI} 166d50a71bdSMitsuru IWASAKI 167d50a71bdSMitsuru IWASAKIapm_event USERSUSPENDREQ { 168d50a71bdSMitsuru IWASAKI exec "sync && sync && sync"; 169d50a71bdSMitsuru IWASAKI exec "sleep 1"; 170d50a71bdSMitsuru IWASAKI exec "apm -z"; 171d50a71bdSMitsuru IWASAKI} 172d50a71bdSMitsuru IWASAKI 173d50a71bdSMitsuru IWASAKIapm_event NORMRESUME, STANDBYRESUME { 174d50a71bdSMitsuru IWASAKI exec "/etc/rc.resume"; 175d50a71bdSMitsuru IWASAKI} 176d50a71bdSMitsuru IWASAKI 177d50a71bdSMitsuru IWASAKI# resume event configuration for serial mouse users by 178d50a71bdSMitsuru IWASAKI# reinitializing a moused(8) connected to a serial port. 179d50a71bdSMitsuru IWASAKI# 180d50a71bdSMitsuru IWASAKI#apm_event NORMRESUME { 181d50a71bdSMitsuru IWASAKI# exec "kill -HUP `cat /var/run/moused.pid`"; 182d50a71bdSMitsuru IWASAKI#} 183d50a71bdSMitsuru IWASAKI 184d50a71bdSMitsuru IWASAKI# suspend request event configuration for ATA HDD users: 185d50a71bdSMitsuru IWASAKI# execute standby instead of suspend. 186d50a71bdSMitsuru IWASAKI# 187d50a71bdSMitsuru IWASAKI#apm_event SUSPENDREQ { 188d50a71bdSMitsuru IWASAKI# reject; 189d50a71bdSMitsuru IWASAKI# exec "sync && sync && sync"; 190d50a71bdSMitsuru IWASAKI# exec "sleep 1"; 191d50a71bdSMitsuru IWASAKI# exec "apm -Z"; 192d50a71bdSMitsuru IWASAKI#} 193d50a71bdSMitsuru IWASAKI 194d50a71bdSMitsuru IWASAKI 195d50a71bdSMitsuru IWASAKI6. Call for developers 196d50a71bdSMitsuru IWASAKI====================== 197d50a71bdSMitsuru IWASAKI 198d50a71bdSMitsuru IWASAKIThe initial version of apmd(8) was implemented primarily to test the 199d50a71bdSMitsuru IWASAKIkernel support code and was ALPHA quality. Based on that code, the 200d50a71bdSMitsuru IWASAKIcurrent version was developed by KOIE Hidetaka <hide@koie.org>. 201d50a71bdSMitsuru IWASAKIHowever, we're still looking around for interesting new features and 202d50a71bdSMitsuru IWASAKIideas, so if you have any thoughts, please let us know. 203d50a71bdSMitsuru IWASAKIDocumentation is also sparse, and the manpage have just written. 204d50a71bdSMitsuru IWASAKIIf you wish to collaborate on this work, please e-mail me: 205d50a71bdSMitsuru IWASAKIiwasaki@freebsd.org. 206d50a71bdSMitsuru IWASAKI 207d50a71bdSMitsuru IWASAKI 208d50a71bdSMitsuru IWASAKIJune 1, 1999 209d50a71bdSMitsuru IWASAKICreated by: iwasaki@FreeBSD.org 210d50a71bdSMitsuru IWASAKIEdited by: jkh@FreeBSD.org 211d50a71bdSMitsuru IWASAKI nick@foobar.org 212