salmon(1) salmon(1) NAME salmon - a multi purpose X11 application SYNOPSIS salmon [long options] help print help and exit lines print line options and exit print <file>[,label] print configuration file contents read <file>[,label] read configuration from file execute <server> <port> [options] spawn a child process Panels ------------- | | | Line and panel numbers should be used if a | 1 | 2 | specific display order is desired. Lines | | | are numbered one to six from the top. ------------- | | | If line and panel numbers are not set and | 3 | 4 | fewer than 24 lines are defined, they will | | | be crowded into the low number panels. ------------- DESCRIPTION Salmon is a multi function application that can be used in the After- step Wharf, as a one or four panel window or as a background daemon not attached to a display. It can respond to LAN requests to launch other salmon or for the local time. It can monitor power status and tempera- tures and, if run SUID, shut down when a critical level is reached. If run by root, it can keep the local host time syncronized to a master salmon time server. It will display from one to six lines of data in single panel mode or from one to six lines each in four panels. Each line is defined at the command line or in a configuration file with a list of line specific options separated with underscores. They can be listed in any order. The -read option takes salmon's configuration from a file. If the file contains labels, the configuration can be located in several ways. By using :label, it will come from the global salmon.cfg file /usr/local/alter/etc/salmon.cfg. If ~label is used it will come from the personal file $HOME/etc/salmon.cfg, if file[,label] is used, it can come from a file in the same directory as the executable. Finally /path/to/file[,label] is an absolute path to the file to be used. Labels start with a colon and can be any reasonable number of ascii characters. Any line in a configuration file that starts with a colon is read as a label. Backslash line continuation can be used in config- uration files. Lines can be broken at any point except that necessary white space must come before a backslash. Salmon responds to key and pointer events in a fashion that varies depending on configuration. If -clickoff is set, any pointer event at any window location causes shutdown to be executed, all key events are ignored. If a pointer or recognized key event occures in a window or panel of type -phasecalc, the display state changes. If a pointer or recognized key event occures on a line of type timer, alarm, reset or elapsed, the status of the line changes. See detailed explanations under -phasecalc and line types below. If any button or recognized key event occures on a line that has a -command defined, that command or Afterstep function will be executed. Recognized keys are ESC, Backspace, Enter/Return, Space, Up, Left and Right arrow keys and the top row and keypad number keys. Commands are the last item processed and will not be executed if the event has already been responded to. Warning messages are logged to .../salmon.log, error messages are logged and printed to stderr. The messages contain a reference to the function where the error occured and a brief summary of what went wrong. If -logbeep is set, a chirp will sound when a message is logged. Using the moon phase graphics and pixmap backgrounds other than peusdo transparent requires an external graphic manipulating suite such as ImageMagick. The talking clock requires a speech synthesizer such as flite or espeak. The volume control function uses mixer, mixerctl or aumix depending on the OS. Helper commands are searched for using the locate data base. This should be kept updated. If an external command is not found, salmon will exit and print a message to stderr and .../salmon.log. The locate function will not be used if an absolute address is given. OPTIONS The first five options are not parsed by getopt_long_only(3) so the leading dash is not required. [-]help Print global and line options and exit. [-]lines Print line options and exit. [-]print <name[,label]>|<:label>|<~label> Read options from file <name>[,label], print results to stdout and exit. [-]read <name[,label]>|<:label>|<~label> Read options from file <name> starting at optional [,label] or read from the system config <:label> or $HOME/etc/salmon.cfg <~label>. [-]execute <-exechost=hostname> <-execport=portnumber> [-execopts=options] Use a running salmon to spawn a child process. Must be the first option. GLOBAL OPTIONS These options have a global effect. Leading dashes should not be used in configuration files. At the command line, one dash should be used for FreeBSD, OpenBSD and Linux and two for NetBSD. The first two options are used by -execute callers only. -exechost<=hostname> Spawn host. -execopts[=options] Spawn salmon with options. -execport<=portnumber> Set spawn port. This option is used on the server to set the port to listen at. It's used on the callers with the -execute option only. -execstop Die after spawning. Used on the servers only. -iconic Start as an icon. -withdrawn Start withdrawn. -moongraphic Display the graphic phase of the moon. Single panel mode only. -daemonize Run in the background to launch child processes or act as a LAN time server/client. Does not need to be attached to a display. -logbeep Make a noise when a message is written to .../salmon.log. -powerlog Log all power state changes to $TEMPDIR/salmon.log. Shift plus 1 key toggles state. The current state will be logged to salmon.log. -timelog Log all time sync requests to $TEMPDIR/salmon.log. Shift plus 2 key toggles state. The current state will be logged to salmon.log. -thermlog Log all temperature state changes to $TEMPDIR/salmon.log. Shift plus 3 key toggles state. The current state will be logged to salmon.log. -execlog Log all spawn attempts to $TEMPDIR/salmon.log. Shift plus 4 key toggles state. The current state will be logged to salmon.log. -clickoff Execute shutdown at a pointer event. Any button press at any location in the window executes shutdown with a delay of -click- time minutes. Click again to pkill shutdown. Overrides any other button or key press responses. -thermoff Execute shutdown at critical temperature level if the critical zone is displayed. -poweroff Execute shutdown at critical battery level if powerstate is dis- played. -settime Set system wall clock to time on the master time keeper. This is done only once at startup and is always logged to salmon.log. If the reset fails for any reason, there will be two identical entries in the log. If it succeeds, the two entries will be different. Salmon must be run by the super user to use the time set and adjust functions on client machines. -clicktime<=minutes> or -clicktime <minutes> Pointer event shutdown delay. Default is immediately. -clicksound<=number> Pointer event shutdown audio file number. Default is none. -magnify<=x> Display salmon at x times 64 pixels. This will be the x/y size of one panel when in four panel mode. Default is 2. -refresh<=seconds> Reexamine data after refresh seconds. If not set, a default will be determined according to display contents. -phasecalc[=?] Display current phase of the moon or the next or previous quar- ters. Use local time or [=?] UTC. Uses the full window or one full panel in four panel mode. In phasecalc, left arrow and button 1 events change the display to the time of the previous quarter, right arrow or button 3 events to the next quarter and up arrow/button 2 events restore the display to the current phase. All other events are ignored. -appname<=name> The name displayed by the window manager. Default is "Salmon". An attempt will be made to interpret environment variables that start with $ and contain only decimal digits and upper case let- ters. -appname=$DISPLAY would set appname to the value of $DIS- PLAY if set or "$DISPLAY" if not set. -position<=<+|->x<+|->y> Position on the screen. X11 -geometry with a fixed size. -cmdfile<=/path/to/filename> If -read is used, initial configuration will be read from global, personal or named configuration file. -cmdfile will be used for followup event, execute and timeout commands that start with a colon. This must be an absolute path name. -tempdir<=directory> Used for resizing pixmaps. Default is $TMPDIR if resolved, /tmp if not. -datadir<=directory> Location of sound and pixmap files. Default is /usr/local/alter/share/salmon. -display<=host:display>[.screen] Local or remote host name, display and screen number for X. Usually not required if display is localhost. -background<=color> Replace the default "black" background color. Hex values in configuration files should have the # replaced with 0x or 0X. -foreground<=color> Replace the default "salmon1" foreground color. -audiocmd<=command> Replace the default audio command. "cat " in most cases. -audiodev[=device] Replace the default audio device. Varies with the OS. The argument is optional, use -audiodev if the audio command requires a NULL device. -thermtime<=minutes> The delay for shutdown if a critical high temperature is experi- enced. Default is immediately. -thermcmd<=command> Execute user command at thermal shutdown. -stepfile<=/dir/name> Afterstep socket location and name. Only needed for executing afterstep internal functions. -timeport<=portnumber> Time server port number. This port is kept open and listening by the master time server. The client machines poll for the current time once every -timepoll minutes. -timehost<=hostname> LAN time server name. The LAN time server should be configured to keep accurate time with ntpd, openntpd, a precise clock or some other means. Using salmon to syncronize a network is only intended to keep the clocks within a few milliseconds. Testing with timedc consistently shows variations of less than 10 mil- liseconds after syncronization has been achieved. -timepoll<=minutes> Time client poll rate in minutes. Default is one minute. -ctlport<=portnumber> Listen for samcon connections on this port. See "man samcon". -powertime<=minutes> Low battery shutdown delay in minutes. Default is immediately. -powercmd<=command> Execute user command at low power shutdown. -talker<=command> Speech synthesizer command to announce the time. Default is "flite" if found by "locate bin/flite". If another default syn- thesizer if prefered, redefine TALKER in salmon.h and recompile. -unzip<=command> Pixmap decompress command. Default is "gunzip <". -resize<=command> Pixmap resize command. Default is "mogrify -colors 20 -scale". -tiler<=command> Pixmap tiling command. Default is "montage -geometry". -line<=option(s)> Define one display line. This should be an underscore separated list of options with arguments in any order. salmon -line=display setting="|Hit|me|" color=green\ command="echo I\'m hit" LINE TYPES These options define displayed line types. The first group does not accept arguments. Use -line<=type> or -line <type>. -memfree Free memory. -memused Used memory. -memtotal Total memory. -swapfree Free swap. -swapused Used swap. -swaptotal Total swap. -swapdevices Swap devices. -load1 One minute load average. -load5 Five minute load average. -load15 Fifteen minute load average. -processes Run queue and processes. -share Share memory. -buffer Buffer memory. -cache Cache memory. -uphours Uptime as hhhhh:mm:ss. -updays Uptime as ddd hh:mm. -ostype Operating system type. -osversion Operating system version. -network Name of the LAN. -moonphase Phase of the moon in text. -powerstate Power system status. -warning and -critical set the respective values which are both required. -sound is an optional audible signal at the warning level and -sound1 at the critical level. -color1, -color2 and -color3 specify colors to override the default green, yellow and red. The warning -sound, if set sig- nals at AC line dropout and when the battery level drops below -warning. -sound1, if set signals when the battery level drops below -critical. If -poweroff is set and salmon is run SUID, shutdown will be executed at < -critical with -powertime delay. -color1 indicates AC line operation, -color2 indicates battery >= -warning, -color3 is used at shutdown and when battery < -warning. -volume Simple volume control on three lines. The top line displays the left and right levels returned by "mixer vol", "mixerctl out- puts.master" or "mixer -q". Between them is either an x indi- cating separate levels or a dash indicating linked levels. An X event on the line toggles the state. The balance is always latched on GNU/Linux. The lower two lines are sliders with the left channel on top and a red bar indicating the current levels. Use key or pointer events on the sliders to set the levels. The lines will be placed in one panel which must have three empty lines. -display Display only. -setting=|Other| replaces the default "Display" with "Other" centered in the panel. This is the default if type is not specified. The next group accepts an optional argument. Use -line<=type[=argument]> -user User CPU percent. A numeric argument to user, nice, system, interrupt or idle limits the splits to one CPU/core (1 - n). No argument or argument equals zero returns the totals. -nice Nice CPU percent. -system System CPU percent. -interrupt Interrupt CPU percent. -idle Idle CPU percent. -hostname Local host name, [=?] as a title. -timer Egg timer. Expire in [[=days ]hours:minutes:seconds], begin countdown at startup. Timers also accept an additional time as a -setting argument which will begin timing at a key or pointer sequence. Timers can be reset while salmon is running. With the pointer on the line, pressing ESC, up arrow or button two enters edit mode for the -timer=value and Backspace, left arrow or button one for the -setting=value. Left or right clicking a digit lowers or raises it respectively. The top row or key pad number keys enter the key value in the digit under the pointer. Left click on the left most character exits reset mode without a timeout while a button two/up arrow event on the line begins countdown with the current value. The new values will replace the configured values and countdown will commence if Enter/Return is pressed with the pointer on the left most char- acter. -alarm One time alarm. Expire at or past [=%H:%M] today or [=%H:%M %y/%m/%d], begin count down at salmon startup. When an alarm is counting down the display reads "Al mm/dd HH:MM". While salmon is running, reset state for alarms is entered by first stopping the count down with a left arrow or button 1 event. The display will read "Alarm X". From stopped state, enter reset as for timers. In reset mode the display reads "A mm/dd HH:MM". An ESC event on the left most character resets the buffer contents to one hour ahead of the current time, left arrow/button one on the character exits reset mode without timeout. If salmon is started without -timer=value or -setting=value, the edit expira- tion time will be the current time. Date and time are automati- cally corrected for end of month, end of year and daylight sav- ing time for the local time zone. -reset Resetting alarm. Expire at [=%H:%M] or [=%H:%M %y/%m/%d] and advance by twenty-four hours or the user specified interval. Begin count down at salmon startup. The -setting argument as HH:MM specifies the reset interval. Reset as for timers and alarms except that button one, left arrow, or backspace allows editing the reset interval. -elapsed Stop watch, [=?] begin timing at salmon startup. Elapsed timers are controlled with left, up and right arrow keys or with but- tons. When stopped, the display reads "Elapsed X". Any button or arrow key starts the timer. While running, up arrow or but- ton 2 stops the display without stopping the time. With the display stopped, right arrow or right click starts the display with the stopped time included, left click or left arrow starts the display without the stopped time. Up or button 2 changes the display to read "Clear Ela X?". In this state, left or right continues timing, up arrow or middle click clears the timer. -calendar One or four panel calendar in local or [=?] UTC. If -linenum is set, "today" will be at the specified line, else it will be the top line. Use -setting=4 for four panel mode, -panel=n to spec- ify the location of the panel in single panel mode or the active line in four panel mode. Use -color=? to highlight the current day. Only the first -line=calendar will be used, any others will be ignored. A key or pointer event on a line will cause the current date to move to that line. The last group requires an argument. Use -line<=type<=argument>> -format<=[UTC]strftime(3) format> Display current local or universal time in the specified format. See the strftime(3) documentation for conversion specifications. Use -setting=? to announce the time. See below. -thermal<=number> Monitor the status of a thermal zone. Requires -warning and -critical values to be set. The -setting option as =k or =f changes the default Celsius scale to kelvins or Fahrenheit for this line only. -color1, -color2 and -color3 specify colors to override the default green, yellow and red for <= -warning tem- perature, <= -critical or > -critical temperature. If -thermoff is set and salmon is SUID, when the temperature exceeds -criti- cal, shutdown will be executed with -thermtime delay. If -sound is set, it will play when the zone temperature exceeds -warning, -sound1 plays at > -critical. -device<=/dev/device|/mount|interface|host|devinfo> Generic device specifier. Will be reset to specific type at startup. The specific devices below may be specified if desired. -color1, -color2 and -color3 specify colors to indi- cate current status. If not defined, an up or down arrow or a question mark will show status. -devdevice<=/dev/device> Monitor the presence of a file in the /dev directory. Status is limited to -color1 or an up arrow if present or -color3 or a question mark if not. -mount<=/mount/point> Monitor the status of a local or network file system. Display will show -setting if defined or -argument from the right most right slash if not. If the file system is not found in /etc/fstab, -color3 or a question mark will indicate current status. If it's found but not mounted, -color2 or a down arrow is used. If the file system is mounted, -color1 or an up arrow will be seen. If a line refers to a network file system, salmon will use -remotehost to monitor the status of the host computer. If the host is not returning ICMP_ECHOREPLY packets, salmon will write "Host $remote for file system $/... is not responding." to salmon.log when the line is clicked. -interface<=interface> Monitor the status of a network interface. Status is -color1 or an up arrow if up and active, -color2 or a down arrow if up not active or -color3 or a question mark if down. -remotehost<=host> Monitor the status of a remote host computer. Status is indi- cated by -color1 or an up arrow if resolved and responding, -color2 or a down arrow if resolved not responding or -color3 or a question mark if not resolved. The time to wait for an ICMP_ECHOREPLY packet to return can be set on a per host basis by adding a comma and the time in seconds to the host name, (-line=device|remotehost=hostname,ttw). The minimum time is ten seconds, the maximum is 150, the default is 60 seconds. -devinfo<=devinfo(8) device> Monitor the status of a device recognized by FreeBSD devinfo(8). FreeBSD devinfo.h lists four states for a device: DIS NOTPRESENT=10, /* not probed or probe failed */ DIS ALIVE=20, /* probe succeeded */ DIS ATTACHED=30, /* attach method called */ DIS BUSY=40 /* device is open */ If a match for the device name isn't found, the display shows -color3 or a question mark, if the result is DIS BUSY, it shows -color1 or an up arrow. The other three results are combined and show -color2 or a down arrow. LINE SPECIFIC OPTIONS These options are specific to a single line. Options that don't apply to the line type are ignored. Use -line=type[=argument] option option[=argument]... -line=memfree color=pink command=\ "echo Umm, fishy." setting=percent -warning<=value> Power or temperature warning level. Required for -powerstate and -thermal lines. Change status when power falls below or temperature rises above -warning level. -critical<=value> Power or temperature critical level. Required for -powerstate and -thermal lines. Change status when power falls below or temperature rises above -critical level. -color<=rgb.txt name or six or twelve digit hex value> Color of this line. May be overridden for power, temperature or device lines. Default colors are set for power and temperature lines but not for device lines. Setting -color1 -color2 and -color3 to the same value disables visible status indication. -color1<=value> Safe temperature, AC line or best case device color. -color2<=value> Warning temperature, running on battery or mid level device color. -color3<=value> Dangerous temperature, critical or warning battery level or "missing/unmounted" device color. -sound<=audio file number|=-numeric label> Audible warning signal for power or temperature, or timer/alarm expiration. If the number is less than zero, it will be used as a label in a configuration or command file. If -cmdfile is set, the label will be searched for there, if not, the personal con- fig file will be searched. If a speech synthesizer is found, it will be executed on the line (with backslash continuation) at the label. The maximum line length is one kbyte which is more than the longest paragraph in this man page. -sound1<=number|=-label> Critical power or temperature audible signal. -panel<=panel number, 1 to 4> Not required, puts salmon into four panel mode if greater than one. If more than six lines are entered, salmon will switch into four panel mode. Up to six lines will be placed in each panel in succession. Use panel and line numbers to specify desired placement. The -line=calendar and -phasecalc functions will be placed in the first empty panel. If no panels are empty, salmon will error exit. -linenum<=line number, 1 to 6> Not required, lines will be assigned numbers in the order entered. Should be used if a specific line/panel placement is desired. If line numbers in a panel are not entered sequen- tially beginning at 1, they will be renumbered in the order entered. The volume function requires three lines. -setting<=value> Information specific to the various line types: -setting=|Different| replaces "Display" as the displayed face of line type -display. Use the pipe (vertical bar) symbol to place spaces where desired. -setting=|CDRom| replaces "/cdrom" as the display of -device type lines. -setting=f|F or -setting=k|K replaces Celsius with Fahrenheit or kelvins as the scale for line type -thermal. This effects the display only, -warning and -critical temperatures must be in Celsius. -setting=percent or -setting=% for memory and swap as percent- age. -setting=1|5|10|15|30|60 for line type -format uses flite or another speech synthesizer to cause salmon to announce the time at the specified interval in minutes. -setting=~label reads an underscore separated list of times from the personal salmon.cfg file, -setting=:label reads from the global salmon.cfg or the -cmdfile=/path/to/file if given. The times must be in 24 hour format as HH:MM HH:MM etc. Any key or pointer event on the line toggles the voice on or off. -setting=HH:MM[ yy/mm/dd] as a second argument for line type -alarm. Leading zeros are not necessary but both the hour and minute cells must be filled. The second expiration time is activated by first stopping the countdown, then enter edit mode with ESC, up arrow or middle click and finally another up arrow or middle click to start the countdown. -setting=[ddd ]HH:MM:SS as a second argument for line type -timer. Leading zeros are not necessary but the hour, minute and second cells must be filled. Activate as for line type -alarm. -setting=HH:MM for line type -reset sets the reset interval. Leading zeros are not necessary but both the hour and minute cells must be filled. -setting=4 with line=calendar puts salmon into four panel calen- dar mode. -setting=pathto/AClineon,pathto/level^full,pathto/level^now from /sys/class/power supply/ for -powerstate lines when running on Linux. -command<=command> Execute command at timeout or event. When entered at the com- mand line or read from a configuration file, the shell will determine where quotes are required. Timers and alarms will execute -command at timeout, other line types when clicked. -timer, -alarm or -reset line types will shutdown at timeout if salmon is SUID and the command is exactly "shutdown". If -clickoff is set, shutdown will be executed at any button event on any part of the window. Other than that, any line type can be used with -command. If a line type is -mount and the argu- ment is an un/mountable file system and the command is "detach", any key or button event on the line toggles the mounted state of the file system. If the mount point is an nfs file system, the presence of the host on the network will be varified before u/mount is called. User specified commands other than "detach" and "shutdown" are not executed SUID. EXAMPLES At the command line: $ salmon -foreground green -magnify=3 $ salmon -execute -execport=49999 -exechost=snarleyow\ -execopts="read :lines &" With labels in .../etc/salmon.cfg: :lines # underscore separated list of option=argument in any order # line=option option=argument linetype # backslash line continuation can be used at any point # goto :label refers to a label in the current config file # Warning and critical temperaturess are in Celsius. # The setting= option only changes the displayed temperature. line=sound=1 thermal=0 warning=40 critical=50 sound1=4 setting=k line=powerstate warning=30 critical=10 sound=1 sound1=6 line=load1 line=load5 line=load15 thermoff # execute shutdown at > critical temperature thermtime=1 poweroff # execute shutdown at < critical battery level powertime=4 goto :theend :clock line=linenum=1 panel=1 color=green setting=|Today|is|\ command=salmon read ~lines line=linenum=2 panel=1 color=green format=|%A|\ setting=~clocktalk line=linenum=3 panel=1 color=green format=|the|%e--|of| line=linenum=4 panel=1 color=green format=|%B| line=linenum=5 panel=1 color=green format=|%Y| line=linenum=1 panel=2 color=0x87ceff format=|It's|%l:%M:%S| line=linenum=2 panel=2 color=0x87ceff format=|%p|%Z| line=linenum=3 panel=2 color=0x87ceff load1 line=linenum=4 panel=2 color=0x87ceff processes line=linenum=5 panel=2 color=0x87ceff uphours line=linenum=6 panel=2 powerstate critical=20 warning=40 line=linenum=1 panel=3 color=red alarm sound=23\ command=echo "Please stop that infernal racket." line=linenum=2 panel=3 color=red alarm sound=24 line=linenum=3 panel=3 color=red reset=12:00\ command=flite -voice slt -t "I'm going out to lunch" line=linenum=4 panel=3 color=red reset sound=26 line=linenum=5 panel=3 color=red timer sound=11 line=linenum=6 panel=3 color=red timer sound=12 phasecalc # Fills panel 4, color is foreground pixmap=-13 # Tile background audiocmd=ogg123 -q foreground=gold position=-64-0 appname=Salmon $OS :clocktalk # Under score separated list of talking clock times. # These are not salmon options/arguments. 06:45 07:10 12:01 12:45 15:30 16:15\ 18:05 19:32 22:00 00:06 :theend position=-64+0 foreground=0x87ceff magnify=4 refresh=1 appname=Salmon 3x $OS :default pixmap=-12 goto :theend FILES /usr/local/alter/man/man1/salmon.1 /usr/local/alter/etc/salmon.cfg /usr/local/alter/share/salmon/*.gz /usr/local/alter/share/salmon/*.au /usr/local/alter/share/salmon/b*.gz SEE ALSO Afterstep documentation pom(6) sysctl(8) devinfo(8) strftime(3) strptime(3) Version 3.0.4 16 May 2015 salmon(1)