| <?xml version='1.0'?> |
| <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" |
| "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> |
| |
| <article> |
| <section> |
| <title>alsactl init</title> |
| <refentry> |
| <refentryinfo> |
| <title>alsactl init</title> |
| <date>July 2008</date> |
| <productname>alsactl</productname> |
| </refentryinfo> |
| |
| <refmeta> |
| <refentrytitle>alsactl_init</refentrytitle> |
| <manvolnum>7</manvolnum> |
| <refmiscinfo class="version"></refmiscinfo> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>alsactl init</refname> |
| <refpurpose>alsa control management - initialization</refpurpose> |
| </refnamediv> |
| |
| <refsect1><title>DESCRIPTION</title> |
| <para>"alsactl init" provides soundcard specific initialization.</para> |
| </refsect1> |
| |
| <refsect1><title>CONFIGURATION</title> |
| <para>All "alsactl init" configuration files are placed in |
| <filename>/usr/share/alsa/init/</filename> directory. The top level |
| configuration file is <filename>/usr/share/alsa/init/00main</filename>. |
| The default top-level file can be also specified using -i or |
| --initfile parameter for the alsactl tool. |
| Every file consists of a set of lines of text. All empty lines or |
| lines beginning with '#' will be ignored.</para> |
| |
| <refsect2><title>Rules files</title> |
| <para>The "alsactl init" rules are read from the files located |
| in the <filename>/usr/share/alsa/init/*</filename>. The top |
| level configuration file is <filename>/usr/share/alsa/init/00main</filename>. |
| Every line in the rules file contains at least one key value pair. |
| There are two kind of keys, match and assignment keys. If all match |
| keys are matching against its value, the rule gets applied and the |
| assign keys get the specified value assigned.</para> |
| |
| <para>A rule may consists of a list of one or more key value pairs |
| separated by a comma. Each key has a distinct operation, depending |
| on the used operator. Valid operators are:</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>==</option></term> |
| <listitem> |
| <para>Compare for equality.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>!=</option></term> |
| <listitem> |
| <para>Compare for non-equality.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>=</option></term> |
| <listitem> |
| <para>Assign a value to a key. Keys that represent a list, |
| are reset and only this single value is assigned.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>+=</option></term> |
| <listitem> |
| <para>Add the value to a key that holds a list |
| of entries.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>:=</option></term> |
| <listitem> |
| <para>Assign a value to a key finally; disallow any |
| later changes, which may be used to prevent changes by |
| any later rules.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| |
| <para>The following key names can be used to match against device |
| properties:</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>CARDINDEX</option></term> |
| <listitem> |
| <para>Match the card index of the ALSA driver.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>CTL{<replaceable>attribute</replaceable>}</option></term> |
| <listitem> |
| <para>Set or test universal control attribute. Possible |
| attributes:</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>numid</option></term> |
| <listitem> |
| <para>Numeric control identification.</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>iface</option>, <option>interface</option></term> |
| <listitem> |
| <para>Control interface name (CARD, HWEDEP, MIXER, PCM, RAWMIDI, TIMER, SEQUENCER)</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>subdev</option>, <option>subdevice</option></term> |
| <listitem> |
| <para>Subdevice number.</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>name</option></term> |
| <listitem> |
| <para>Control name</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>index</option></term> |
| <listitem> |
| <para>Control index</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>type</option></term> |
| <listitem> |
| <para>Control type (BOOLEAN, INTEGER, INTEGER64, ENUMERATED, BYTES, IEC958)</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>attr</option>, <option>attribute</option></term> |
| <listitem> |
| <para>Attributes (stored in a string - use match characters * and ?):</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>r</option></term> |
| <listitem> |
| <para>control is readable</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>w</option></term> |
| <listitem> |
| <para>control is writable</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>v</option></term> |
| <listitem> |
| <para>control is volatile</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>i</option></term> |
| <listitem> |
| <para>control is inactive</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>l</option></term> |
| <listitem> |
| <para>control is locked</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>R</option></term> |
| <listitem> |
| <para>control is TLV readable</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>W</option></term> |
| <listitem> |
| <para>control is TLV writable</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>C</option></term> |
| <listitem> |
| <para>control is TLV commandable</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>o</option></term> |
| <listitem> |
| <para>process is owner of this control</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>u</option></term> |
| <listitem> |
| <para>control created in user space</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>owner</option></term> |
| <listitem> |
| <para>Control owner process PID number</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>count</option></term> |
| <listitem> |
| <para>Control count of values</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>min</option></term> |
| <listitem> |
| <para>Value range - minimum value</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>max</option></term> |
| <listitem> |
| <para>Value range - maximum value</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>step</option></term> |
| <listitem> |
| <para>Value range - step value</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>dBmin</option></term> |
| <listitem> |
| <para>Value range - minimum dB value</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>dBmax</option></term> |
| <listitem> |
| <para>Value range - maximum dB value</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>items</option></term> |
| <listitem> |
| <para>Enumerated value - number of text items</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>enums</option></term> |
| <listitem> |
| <para>Enumerated value - list of text names stored between '|' character</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>value</option></term> |
| <listitem> |
| <para>Value of control stored to a string delimited by |
| comma (,).</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>do_search</option></term> |
| <listitem> |
| <para>Search for a control. Value "1" is returned |
| if a control was found. The CTL{name} key might |
| contain match characters * and ?. An control index |
| might be specified as first argument starting from |
| zero (e.g. CTL{do_search 2}="1").</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>do_count</option></term> |
| <listitem> |
| <para>Search for a controls and return total count |
| of matched ones. The CTL{name} key might contain match |
| characters * and ?.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>CONFIG{sysfs_device}</option></term> |
| <listitem> |
| <para>The relative path to sysfs subsystem specifying |
| the root directory of a soundcard device. Usually, |
| it should be set to "/class/sound/card$cardinfo{card}/device". |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>ATTR{<replaceable>filename</replaceable>}</option></term> |
| <listitem> |
| <para>Match sysfs attribute values of the soundcard device. |
| The relative path to sysfs tree must be defined by |
| CONFIG{sysfs_device} key. Trailing whitespace in the attribute |
| values is ignored, if the specified match value does |
| not contain trailing whitespace itself. Depending on |
| the type of operator, this key is also used to set |
| the value of a sysfs attribute. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>ENV{<replaceable>key</replaceable>}</option></term> |
| <listitem> |
| <para>Match against the value of an environment variable. Up |
| to five <option>ENV</option> keys can be specified per rule. |
| Depending on the type of operator, this key is also used |
| to export a variable to the environment.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>PROGRAM</option></term> |
| <listitem> |
| <para>Execute external program. The key is true, if |
| the program returns without exit code zero. The whole event |
| environment is available to the executed program. The |
| program's output printed to stdout is available for |
| the RESULT key.</para> |
| <para>Several buildin commands are available:</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>__ctl_search</option></term> |
| <listitem> |
| <para>Search for a control. The CTL{name} key might |
| contain match characters * and ?. An control index |
| might be specified as first argument starting from |
| zero (e.g. PROGRAM="__ctl_search 2").</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>__ctl_count</option></term> |
| <listitem> |
| <para>Search for a controls and return total count |
| of matched ones. The CTL{name} key might contain match |
| characters * and ?.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>RESULT</option></term> |
| <listitem> |
| <para>Match the returned string of the last PROGRAM call. |
| This key can be used in the same or in any later rule |
| after a PROGRAM call.</para> |
| </listitem> |
| </varlistentry> |
| |
| </variablelist> |
| |
| <para>Most of the fields support a shell style pattern matching. |
| The following pattern characters are supported:</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>*</option></term> |
| <listitem> |
| <para>Matches zero, or any number of characters.</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>?</option></term> |
| <listitem> |
| <para>Matches any single character.</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>[]</option></term> |
| <listitem> |
| <para>Matches any single character specified within |
| the brackets. For example, the pattern string 'tty[SR]' |
| would match either 'ttyS' or 'ttyR'. Ranges are also |
| supported within this match with the '-' character. |
| For example, to match on the range of all digits, |
| the pattern [0-9] would be used. If the first character |
| following the '[' is a '!', any characters |
| not enclosed are matched.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| |
| <para>The following keys can get values assigned:</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>CTL{numid}</option>, <option>CTL{iface}</option>, |
| <option>CTL{device}</option>, <option>CTL{subdev}</option>, |
| <option>CTL{name}</option>, <option>CTL{index}</option>, |
| </term> |
| <listitem> |
| <para>Select universal control element.</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>CTL{value}</option></term> |
| <listitem> |
| <para>Value is set (written) also to soundcard's control |
| device and RESULT key is set to errno code. The result of |
| set operation is always true (it means continue with |
| next key on line).</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>CTL{values}</option></term> |
| <listitem> |
| <para>Value is set (written) also to soundcard's control |
| device (all control values are set to specified value) and |
| RESULT key is set to errno code. The result of |
| set operation is always true (it means continue with |
| next key on line).</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>CTL{write}</option></term> |
| <listitem> |
| <para>Value is set (written) also to soundcard's control |
| device (all control values are set to specified value). |
| The result of set operation is true when operation |
| succeed (it means continue with next key on line).</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>ENV{<replaceable>key</replaceable>}</option></term> |
| <listitem> |
| <para>Export a variable to the environment. Depending on the type of operator, |
| this key is also to match against an environment variable.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>RESULT</option></term> |
| <listitem> |
| <para>Set RESULT variable. Note that PROGRAM also sets |
| this variable, but setting this variable manually |
| might be useful to change code execution order (included |
| files).</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>LABEL</option></term> |
| <listitem> |
| <para>Named label where a GOTO can jump to.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>GOTO</option></term> |
| <listitem> |
| <para>Jumps to the next LABEL with a matching name. |
| The goto cannot jump backward.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>INCLUDE</option></term> |
| <listitem> |
| <para>Include specified filename or all files in specified directory</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>ACCESS</option></term> |
| <listitem> |
| <para>Check if specified file or directory exists</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>CONFIG{sysfs_device}</option></term> |
| <listitem> |
| <para>The relative path to sysfs subsystem specifying |
| the root directory of a soundcard device. Usually, |
| it should be set to "/class/sound/card$cardinfo{card}/device". |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>PRINT</option></term> |
| <listitem> |
| <para>PRINT value to stdout.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>ERROR</option></term> |
| <listitem> |
| <para>PRINT value to stderr.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>EXIT</option></term> |
| <listitem> |
| <para>Exit immediately and set program exit code to value |
| (should be integer). If value is "return" string, |
| parser leaves current included file and returns to parent |
| configuration file.</para> |
| </listitem> |
| </varlistentry> |
| |
| </variablelist> |
| |
| <para>The <option>PROGRAM</option>, <option>RESULT</option>, |
| <option>CTL{value}</option>, |
| <option>PRINT</option>, <option>ERROR</option>, |
| <option>EXIT</option>, <option>CONFIG{}</option> |
| fields support simple printf-like string substitutions. |
| It allows the use of the complete environment set by earlier matching |
| rules. For all other fields, substitutions are applied while the individual rule is |
| being processed. The available substitutions are:</para> |
| <variablelist> |
| <varlistentry> |
| <term><option>$cardinfo{<replaceable>attribute</replaceable>}</option>, <option>%i{<replaceable>attribute</replaceable>}</option></term> |
| <listitem> |
| <para>See CARDINFO{} for more details.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>$ctl{<replaceable>attribute</replaceable>}</option>, <option>%C{<replaceable>attribute</replaceable>}</option></term> |
| <listitem> |
| <para>See CTL{} for more details.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>$attr{<replaceable>file</replaceable>}</option>, <option>%s{<replaceable>file</replaceable>}</option></term> |
| <listitem> |
| <para>The value of a sysfs attribute found at the device, where |
| all keys of the rule have matched. |
| If the attribute is a symlink, the last element of the symlink target is |
| returned as the value.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>$env{<replaceable>key</replaceable>}</option>, <option>%E{<replaceable>key</replaceable>}</option></term> |
| <listitem> |
| <para>The value of an environment variable.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>$result</option>, <option>%c</option></term> |
| <listitem> |
| <para>The string returned by the external program requested with PROGRAM. |
| A single part of the string, separated by a space character may be selected |
| by specifying the part number as an attribute: <option>%c{N}</option>. |
| If the number is followed by the '+' char this part plus all remaining parts |
| of the result string are substituted: <option>%c{N+}</option></para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>$sysfsroot</option>, <option>%r</option></term> |
| <listitem> |
| <para>Root directory where sysfs file-system is mounted. |
| Ususally, this value is just "/sys".</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>$config{<replaceable>key</replaceable>}</option>, <option>%g{<replaceable>key</replaceable>}</option></term> |
| <listitem> |
| <para>The value of a configuration variable. See CONFIG{} for more details.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>%%</option></term> |
| <listitem> |
| <para>The '%' character itself.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>$$</option></term> |
| <listitem> |
| <para>The '$' character itself.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| <para>The count of characters to be substituted may be limited |
| by specifying the format length value. For example, '%3s{file}' |
| will only insert the first three characters of the sysfs |
| attribute</para> |
| </refsect2> |
| </refsect1> |
| |
| <refsect1><title>AUTHOR</title> |
| <para>Written by Jaroslav Kysela <email>perex@perex.cz</email></para> |
| <para>Some portions are written by Greg Kroah-Hartman <email>greg@kroah.com</email> and |
| Kay Sievers <email>kay.sievers@vrfy.org</email>.</para> |
| </refsect1> |
| |
| <refsect1> |
| <title>SEE ALSO</title> |
| <para><citerefentry> |
| <refentrytitle>alsactl</refentrytitle><manvolnum>1</manvolnum> |
| </citerefentry></para> |
| </refsect1> |
| </refentry> |
| </section> |
| </article> |