Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox where print preview displays the noscript content */
noscript {display:none;}
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

Also see AdvancedOptions
AX.25 is a radio protocol for digital communications. AX.25 can be used for direct station-to-station communication, network routed communication ,and unconnected, //broadcast// , messaging.

Station-to-station communications can be direct, or through a [[digipeater|http://en.wikipedia.org/wiki/Digipeater#Digipeater]]. One common use of this method is to access [[PBBS|Packet Bulletin Board Systems]].

Several networking protocols are used on top of AX.25, including NET/ROM, ROSE, TexNet, and the [[Internet Protocol|http://en.wikipedia.org/wiki/Internet_protocol]].

[[APRS|http://en.wikipedia.org/wiki/Automatic_Packet_Reporting_System]] is a widely used form of unconnected messaging. It is used for position reports, weather reports, and text messaging. 

Linux kernels, since 2.4, have included support for the AX.25 protocol. A modem is needed to complete the support for AX.25 transmissions. The modem may be part of a  [[TNC|http://en.wikipedia.org/wiki/Terminal_node_controller]] or software such as SoundModem.

aprsd has AX.25 support, see the aprsdocs.html file in the CVS archive on Source Forge, http://aprsd.cvs.sourceforge.net/aprsd/aprsd/doc/, is out-of-date and says that AX.25 is not supported.

* soundmodem must be started as root. Also drop mDNS messages (actually, all IP traffic).
$ sudo soundmodem sm_ax25.cfg
$ sudo iptables -A OUTPUT -o sm0 -j DROP
* The command to connect to the K6SNY-1 PBBS for ARES network check-in is:
$ axcall sm0 K6SNY-1
* To monitor AX.25 traffic:
$ sudo axlisten -art
* Set the soundmodem TXDelay to 300ms (default was 150ms) to account for the RF activated relay in the inter-mod filter.
* To match the MFJ-1278B performance when using SoundModem drop the volume on the output channel to produce a signal with ~120mV p-to-p. For the Analog-F channel on the CA0106 (Soundblaster Live Audigy SE), the alsamixer setting is -33db (29/100).
This script will start or stop the daemons I am using for AX.25 and SoundModem.

The script will:
* Install an iptables rule to drop all IP traffic to the AX.25 port.
* Start (or stop) soundmodem with the AX.25 configuration.
* Start (or stop) mheardd. The mheard list is cleared.

# sm_ax25.sh - startup soundmodem and mheardd

# -s log to syslog

# -f flush the mheard list
# -l log to syslog
# -n number of entries (max=100)
MH_ARGS="-f -l -n 100"

function start_sm {
  /sbin/iptables -L -v | grep DROP | grep -q sm0
  if [ $? -ne 0 ]
    /sbin/iptables -A OUTPUT -o sm0 -j DROP
  # Don't start soundmodem if the drop rule is not in iptables.
  # We don't want local network traffic to go out to the radio.
  /sbin/iptables -L -v | grep DROP | grep -q sm0
  if [ $? -eq 0 ]
    /sbin/start-stop-daemon --start --background --exec $SM_EXEC -- $SM_ARGS
    if [ $? -eq 0 ]
      /sbin/start-stop-daemon --start --exec $MH_EXEC -- $MH_ARGS
    echo "Soundmodem not started- missing DROP rule for sm0 in iptables." >&2

function stop_sm {
  /sbin/start-stop-daemon --stop --exec $MH_EXEC
  /sbin/start-stop-daemon --stop --exec $SM_EXEC

#sudo iptables -D OUTPUT -o sm0 -j DROP

case $1 in



    echo "Usage $0 {start|stop|restart}" >&2
    exit 1

exit 0

Per the [[2m band plan|http://www.k0nr.com/rwitte/2m_frequencies.html]], 144.900-145.100MHz is allocated to packet  radio.
|''Local Packet Stations and Frequencies''|c
|Call Sign|Freq.|Type|Location|Notes|h
||144.390|APRS|National Calling Freq.|>|
|N0ARY-1|145.930|PBBS|San Jose,CA||
|SCC ARES|144.910|Simplex|Santa Clara County ARES net|>|
|K6SNY-1|144.910|PBBS|EOC Sunnyvale,CA|SCC ARES check-in by message to W6MOL. Include call sign, city and route (direct or digipeat). Tuesday before 2000H|
|W6XSC-2|144.910|Digipeater|Crystal Peak, CA||
The [[Fldigi Project|http://www.w1hkj.com/Fldigi.html]] provides pre-built binaries and recommends their use. However, there are useful configuration options available in custom builds.

This is a record of the build process that worked for me.

$ ./configure --disable-rpath
Check the summary report when {{{configure}}} is complete to see which //autodetected// options have been enabled. For any that are not enabled, installing the //dev// version of the package (using Synaptic) is all that is needed. Except for {{{xmlrpc}}} which does not have a runtime library installed. For {{{xmlprc}}} you must install both {{{libxmlrpc-c3}}} and {{{libxmlrpc-c3-dev}}}.

On Ubuntu 8.10, portaudio was not detected even after I installed libportaudio-dev. When I explicitly enable portaudio ({{{--with-portaudio}}}), an error message identifies the problem - the portaudio lib is the wrong version.

sndfile also could not be enabled due to version issues, but I think the problem is that the version detection is wrong. The installed libsndfile version is 1.0.17 which should satisfy the requirement ({{{sndfile >= 1.0.10}}}).

For Fldigi version 3.10, a patch is needed if {{{libhamlib-dev}}} is not installed:
diff --git a/src/misc/locator.c b/src/misc/locator.c
index 9809a3f..7333481 100644
--- a/src/misc/locator.c
+++ b/src/misc/locator.c
@@ -66,7 +66,7 @@
#include <math.h>

-#include <hamlib/rotator.h>
+#include "locator.h"

#ifndef DOC_HIDDEN
(Patch courtesy of Stelios, !M0GLD on the [[linuxham|http://groups.yahoo.com/group/linuxham/]] news group.)

Fldigi version 3.11.1 fixes the sndfile problem, but requires a different patch when {{{libhamlib-dev}}} is not installed:
diff -ru fldigi-3.11.org/src/dialogs/confdialog.cxx fldigi-3.11/src/dialogs/confdialog.cxx
--- fldigi-3.11.org/src/dialogs/confdialog.cxx	2009-03-31 16:24:37.000000000 -0700
+++ fldigi-3.11/src/dialogs/confdialog.cxx	2009-04-19 10:55:44.000000000 -0700
@@ -16,7 +16,11 @@
 #include "Viewer.h"
 #include "pskrep.h"
 #include "logsupport.h"
 #include "hamlib.h"
 Fl_Double_Window *dlgConfig; 
 void set_qrz_buttons(Fl_Button* b) {

I built two versions of Fldigi, one for the computers at home and a smaller footprint to run on the OLPC (when running Ubuntu 8.10). I used the following for v3.11.1 (use {{{--without-sndfile}}} for v3.10):
  $sh ./configure --disable-rpath --enable-optimizations=native --with-jpeg --with-png --with-xmlrpc \
      --with-pulseaudio --without-hamlib --disable-oss

Ubuntu on OLPC does not have {{{pulseaudio}}} installed by default and Fldigi does not support {{{alsa}}} directly, so use {{{oss}}} instead. To keep the image small, also disable {{{jpeg}}}, {{{sndfile}}}, and  {{{xmlrpc}}}:
  $sh ./configure --disable-rpath --enable-optimizations=native --without-jpeg --with-png --without-xmlrpc \
      --without-sndfile --without-pulseaudio --without-hamlib --enable-oss

Now build with a simple make command:
  $ make

Install using {{{checkinstall}}} so that it is easy to remove and/or update using {{{apt}}}:
  $ sudo checkinstall

When building for the OLPC, the following variation can be used on a //host// build system in order to create the {{{.deb}}} package without installing it.
  $ sudo checkinstall --install=no
I changed the name to "{{{fldigi-olpc}}}" so that the {{{.deb}}} package can be distinguished from the one I built for a standard Ubuntu desktop.
!! Get the source
The source is at http://www.baycom.org/~tom/ham/soundmodem/. When this was written (5/25/2009) the latest version was 0.14 and was available in a tarball:  soundmodem-0.14.tar.gz
$ mkdir working
$ wget http://www.baycom.org/~tom/ham/soundmodem/soundmodem-0.14.tar.gz
!! Unpack
$ tar -xzf soundmodem-0.14.tar.gz
!! Configure
$ cd soundmodem-0.14/
$ ./configure --enable-mmx
Configure will check for the packages it needs and issue errors if they are not found. Use Synaptics, or the package manager of your choice to install the necessary packages.
!! Build
$ make 2>&1 | tee build.log
A simple {{{make}}} would do the job, but I like to save all the results in a log file just in case there is a problem.
!! Install
While a simple install using the {{{make install}}} command will work, using {{{checkinstall}}} is not much more difficult and works with the Ubuntu package manager. More information on {{{checkinstall}}}, including installation instructions, can be found under the CheckInstall tiddler.
$ sudo checkinstall
Checkinstall will ask a few questions, create a {{{.deb}}} package and install it. Here is the Q&A portion of the dialog with my answers:
checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran
           This software is released under the GNU GPL.

The package documentation directory ./doc-pak does not exist. 
Should I create a default set of package docs?  [y]: y

Preparing package documentation...OK

Please write a description for the package.
End your description with an empty line or EOF.
>> Soundmodem built locally from source.

**** Debian package creation selected ***

This package will be built according to these values: 

0 -  Maintainer: [ root@blackbird.local.dunmire.org ]
1 -  Summary: [ Soundmodem built locally from source. ]
2 -  Name:    [ soundmodem ]
3 -  Version: [ 0.14 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ soundmodem-0.14 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]

Enter a number to change any of them or press ENTER to continue: 0
Enter the maintainer's name and e-mail address: 
>> jerry@dunmire.org

This package will be built according to these values: 

0 -  Maintainer: [ jerry@dunmire.org ]
1 -  Summary: [ Soundmodem built locally from source. ]
2 -  Name:    [ soundmodem ]
3 -  Version: [ 0.14 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ soundmodem-0.14 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]

Enter a number to change any of them or press ENTER to continue: 

Installing with make install...
I changed changed the Maintainer, but the installation would have  worked just fine without the change.

There are no more questions, but additional status messages are printed.

The installed programs are {{{/usr/local/bin/soundmodemconfig}}} and {{{/usr/local/sbin/soundmodem}}}. {{{soundmodem}}}.

Now you are ready to proceed to [[Set up SoundModem]]
This is the [[Digital Notebook|NotebookSetup]] for my work on a //Digital Communications Center//.

* Add digital communications to my //Ham Shack// using a single computer and requiring a minimum number (ideally zero) of cable swaps to change radios and modes.
* Minimize the required equipment for portable operation. Just a computer and a radio. No external [[TNC|http://en.wikipedia.org/wiki/Terminal_node_controller]].
* APRS support
* Support for local ARES packet operation
* HF Digital modes including PSK31
* Utilize the [[hardware|My Equipment]] I already have.
* Based on [[FOSS|http://en.wikipedia.org/wiki/Free_and_open_source_software]]

!! Updates
!!! July 4, 2009:
* Added new [[Operating Notes]] section
!!! Older
* Scrapbook links
* Configuration updates
* Cleaned up tags
* Added more information on my soundmodem configuration.
Fldigi is a Digital modem program for Linux (and others). Visit the web site at [http://www.w1hkj.com/Fldigi.html] for more details.

Use the links at the right for information on how Fldigi is build, installed, and used in the DigitalCommCenter
''Source:'' [[fldigi-3.11.1.tar.gz|fldigi/fldigi-3.11.1.tar.gz]]
''Patch:'' [[without_hamlib.patch|fldigi/without_hamlib.patch]]
''Desktop package:'' [[fldigi_3.11.1-1_i386.deb|fldigi/fldigi_3.11.1-1_i386.deb]]
''OLPC XO-1/Ubuntu package:'' [[fldigi-olpc_3.11.1-1_i386.deb|fldigi/fldigi-olpc_3.11.1-1_i386.deb]]
This information is for reference only. Do not use this TiddlyWiki as the starting point for a new notebook. A template notebook is available at file:///media/geda_usb/notebook_template/
To get started with this blank TiddlyWiki based project notebook, you'll need to modify the following tiddlers:
* Replace the string 'DigitalCommCenter' in Notebook, ScrapBook, and WikiSetup.
* Follow the instructions in WikiSetup and ScrapBook.
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
(Note that your username is saved in a browser cookie and must be set on each browser and system that you use.)
SoundModem and the Linux [[AX.25]] tools require IP Addresses because they support routing to, and through, the Internet.

A [[Class A address block|http://en.wikipedia.org/wiki/Classful_network]] of [[IP Addresses|http://en.wikipedia.org/wiki/IP_address]] has been reserved for AX.25 use. The IP addresses required for Soundmodem and the Linux [[AX.25]] tools should be allocated from this block.

If you plan to route traffic using TCP/IP, or other Internet protocols, you should request IP addresses for your station from [[AMPR.ORG|http://www.ampr.org/]].

If you are just using SoundModem and the linux [[AX.25]] tools to access [[PBBS|Packet Bulletin Board System]] systems or with APRS, you can choose a arbitrary address from the [[testing subnet|http://en.wikipedia.org/wiki/AMPRNet#]]. Addresses in this testing subnet range from to
Installed the libfltk1.1 package:
  $ sudo apt-get install libfltk1.1
Now copy the Fldigi package (see [[Building Fldigi]]) to the XO-1 and install it using the following command:
  $  dpkg -i fldigi-olpc_3.11.1-1_i386.deb
 * Fldigi has a GUI. Start it in the background:
$ fldigi &
!runTitle startup utility
For programs that run in a terminal window I've found that setting the window title makes it easier to find the window since it is listed in the icon on the bottom bar (Ubuntu/Gnome). This script makes it easy to start the program and automatically set the title bar:
# runTitle - execute a program and display in xterm title
case $1 in
echo -ne "\033]0;${prgm}\007"
exec $*
sudo sh -x sm_ax25.sh start
sudo sh -x sm_ax25.sh stop
runtitle alsamixer -c 2
Since I have three audio interfaced installed, they should be referred to by name. The names are available from {{{/proc/asound/cards}}} and are used as follows:
|CA0106|AX25 packet- Kenwood HT|
|SA7012|Ubuntu system sound, Skype|
|default|Fldigi - HF radio. Note that //default// is actually the name provided by the C-Media USB audio device!|

So to control the audio levels for packet use the following command:
runtitle alsamixer -c CA0106
Similarly, to control the sound levels for fldigi use this command:
runtitle alsamixer -c default
LinPac is a packet terminal program. It is an alternative to the {{{axcall}}} program.

LinPac has not had a maintainer since 2006 and the most recent release was in 2003.

I was able to build version 0.17pre3 from the source tarball without much difficulty.

The reason I am considering LinPac is that mcall does not have a scrolling QSO window, which makes it difficult to view long responses.

* assumes old program names:
** {{{listen}}} instead of {{{axlisten}}}
* I had to modify the {{{libtool}}} script from the source tarball in order to install LinPac using {{{checkinstall}}}
* LinPac uses the F1 key to select the 1st QSO window, however {{{gnome-terminal}}} is configured to bring up a help window when the F1 key is pressed. ''Workaround'' - disable help using the {{{Edit->Keyboard Shortcuts...}}} dialog from the {{{gnome-terminal}}} menu bar.
* Mailbox support is integral to the design of LinPac, but not a functionality I intended to use.
* Character problems:
** 'x' shows up in locations where there should probably be a '|'
** The help menu shows command starting with '//' rather than ':' (and '//' does not work!).

[[Operating Notes]]
Reference: [[http://www.qbjnet.com/packet.html]]

AX.25 support is part of the Ubuntu 8.04 Linux kernel (2.6.24).

Installed the following additional packages:
* ax25-tools
* ax25-xtools
* ax25-apps
* libax25

Changed the {{{/etc/ax25/axports}}} file by adding the following lines and commenting out all the others:
# Configuration for soundmodem
# Added 3/21/09 jdunmire
sm0     KA6HLD          38400   255     2       soundmodem

{{{sm0}}} is the interface. Use {{{ifconfig}}} to see the values.

* {{{axcall}}} is the command line program to make a //call//
* {{{axlisten}}} monitors the ports
* {{{ax25_call}}} is a program that can be run by {{{ax25d}}}
* I am having to start all the programs as root (sudo).
* IP Address:

With {{{ax25d}}} running a UDP packet was being sent from (the IP address setup in the soundmodem config) to over the sm0 port. It would have gone out over the air if I had TX setup.
''UPDATE'': The problem was not ax25d, but the avahi-daemon which sends out mDNS messages on all interfaces. The solution is add an entry in to iptables to block the mDNS messages. Since I am not using IP on the AX.25 port, I blocked all IP traffic:
$ sudo iptables -A OUTPUT -o sm0 -j DROP
!!Home Station Hardware
* Kenwood TH-28A - 2m, typically used for packet radio
* Kenwood TH-78A - 2m/70cm, this is my primary radio used for ARES/RACES, mobile operations, and as a second packet radio.
* Yaesu VX-1R - VHF/UHF Dual-band transceiver. 
* Yaesu FT-747 HF - for experiments with PSK31 and related HF digital modes.
* HF antenna- MFJ-1798 Multi-Band vertical
* 2m antenna- Cushcraft ARX2B Ringo Ranger II
* 70cm antenna- rubber duck
* AMD Athlon XP 2600+ with 1.5GB main memory, running Ubuntu 8.04
* [[MJF-1278B|TNC]] Multi-mode Data Controller for packet.
* Various homebrew adapters to connect radios, peripherals, and the computer
AX.25 addresses are call signs. To allow for multiple stations and/or services for each amateur radio operator, the AX.25 addresses include a Secondary Station Identifier (SSID). The SSID is a 4-bit number (0-15) that defaults to zero if not specified.

There does not seem to be a standard assignment for SSID and each operator seems to choose their own. So here is my assignment plan:
|''SSID table for KA6HLD''|c
|SSID|Textual Form|Allocation|h
|0|KA6HLD KA6HLD-0|SoundModem using SoundBlaster Audigy Sound Card.|
|1|KA6HLD-1|MFJ Multimode Data Controller, MFJ-1278B|
The SoundModem settings below are in support of this hardware:
* SoundBlaster Audigy SE
* Kenwood TH-28A or TH-78A
* RTS PTT interface
!! SoundModem settings - KISS mode, for Xastir
* Configuration file: ~/soundmodem/soundmodem.cfg
* Configuration Name: SB-KISS
* Mode: alsa
* ALSA Audio Driver: plughw:CA0106
* Capture Channel: MIC
* /dev/ttyS1
* Channel 0
** Modulator: afsk, 1200,1200,2200,Differential
** Demodulator: afsk, 1200,1200,2200,Differential
** Packet I/O
*** Mode: KISS
*** File: /tmp/soundmodem0
*** Unlink: checked
!! SoundModem settings - MKISS mode, for AX.25
* Configuration file: ~/soundmodem/sm_ax25.cfg
* Configuration Name: AX.25
* Mode: alsa
* ALSA Audio Driver: plughw:CA0106
* Capture Channel: MIC
* /dev/ttyS1
* Channel Access
** TxDelay: 150
* Channel 0
** Modulator: afsk, 1200,1200,2200,Differential
** Demodulator: afsk, 1200,1200,2200,Differential
** Packet I/O: MKISS
*** Mode: MKISS
*** Interface Name: sm0
*** Call Sign: KA6HLD
*** IP Address:
*** Network Mask:
*** Broadcast Address:
!!{{{alsamixer}}} Settings
!!!!Card: CA0106
|Analog F|29 (-33db)|

|Mic volume|49 (-41db)|
|Analog S|Line in|
|Shared M|Mic in|
!!Radio settings
Volume: 4
Squelch: open
I have started to use a //Digital Notebook// for my various projects. Each notebook is portable (at least between systems running Ubuntu) and requires only the [[FireFox|http://www.mozilla.com/en-US/firefox/]] with the [[Scrapbook|https://addons.mozilla.org/en-US/firefox/addon/427]] add-on.

The notebook content is stored in a wiki based on [[TiddlyWiki|http://www.tiddlywiki.com]]. The [[Scrapbook|https://addons.mozilla.org/en-US/firefox/addon/427]] add-on is used to manage related links. The wiki, scrapbook, and any additional data files are stored on a USB memory stick.

To setup a //Digital Notebook// like this, look at the tiddlers listed in the tagging box, to the left.

To access the notebook from a new computer, following the instructions in the listed tiddlers.

The PTT interface for the TH-28A (or TH-78A) is based on the [[Serial Port Solution|http://www.baycom.org/~tom/pcf/ptt_circ/ptt.html#serial] suggested by Thomas Sailer.

A schematic of the variation I am using for the connection between an SoundBlaster Audigy audio card and a Kenwood TH-78A is available as a [[PNG|soundmodem/mySoundCardInterface.png]] image or a [[PDF|soundmodem/mySoundCardInterface.pdf]] file.

I have a similar interface for the FT-747GX.
For more information on Bulletin Board Systems, see the Wikipedia article: http://en.wikipedia.org/wiki/Bulletin_board_system
ScrapBook is a plugin for the [[FireFox|http://www.mozilla.com/firefox]] browser.

The ScrapBook repository associated with the project is located on the USB memory stick with this wiki. See WikiSetup for more information.

Once the ScrapBook plugin has been installed, set the options to enable //Multi-ScrapBook//. To manage the scrapbooks, ScrapBook must be displayed in the side bar. A Multi-ScrapBook icon will be displayed and associated drop down window will have a //Manage// option.

For consistency, name the scrapbook ''DigitalCommCenter'' when adding to the Scapbook manager on a new system.
SoundModem requires a configuration file. A GUI to create the configuration is provided by the {{{soundmodemconfig}}} program.

As a starting point see the [[LinuxSoundModem webpage|http://info.aprs.net/index.php?title=LinuxSoundmodem]]. I had to experiment a bit to find the following key points:
* You have to add both a new //Configuration// and at least one new //Channel// in the configuration.
* Getting the {{{ALSA Audio Driver}}} and {{{Capture Channel}}} settings correct was the hard part for me.
** I finally got the clues I needed from the [[Unofficial ALSA FAQ|http://alsa.opensrc.org/index.php/FAQ]].
** The drop down lists for the {{{ALSA Audio Driver}}} and {{{Capture Channel}}} are not complete and did not have the right values for my setup.
** In the {{{ALSA Audio Driver}}} entry box I typed: {{{plughw:CA0106}}} to select the SoundBlasterAudigySE card. The {{{plughw}}} setting is necessary because the sample rates requested by SoundModem are not supported directely.
** In the {{{Capture Channel}}} entry box I typed: {{{MIC}}}. I tried the other settings, {{{MONO, Left, Right}}} but they didn't work. I finally guessed at {{{MIC}}} because that is the channel listed in the {{{alsamixer}}} controls.
* To test the SoundModem Channel I connected a microphone and used the {{{Diagnostics->Scope}}} dialog that is available when a {{{Channel}}} is selected.

See [[My SoundModem Settings]] for a summary of the settings I am using.
Ubuntu based Amateur Radio Communications 
@@The Ubuntu 8.04 soundmodem package did not work for me: [[Original Instructions|Ubuntu 8.04 SoundModem]]@@
A newer version, 0.12, built from source, works much better. The {{{Broken Pipe}}} errors are gone and soundmodem ran overnight without crashing.
[[Build|Building SoundModem From Source]]
[[Setup|Set up SoundModem]]
[[Configuration Record|SoundModem - Configuation]]
[[PTT Interface]]
[[Problems|SoundModem Problems]]
Here are screen snaps of the configuration that is working for me. The contents of the resulting configuration file are listed at the bottom of this tiddler.

''NOTE:'' After these were taken I changed the KISS device to /tmp/soundmodem0

[img[Sound Modem Configuration Dialog|soundmodem/images/Screenshot-SoundModem Configurator.png]]
[img[Sound Modem Configuration Dialog|soundmodem/images/Screenshot-SoundModem Configurator-1.png]]
[img[Sound Modem Configuration Dialog|soundmodem/images/Screenshot-SoundModem Configurator-2.png]]
[img[Sound Modem Configuration Dialog|soundmodem/images/Screenshot-SoundModem Configurator-3.png]]
<?xml version="1.0"?>
  <configuration name="SB-KISS">
    <chaccess txdelay="150" slottime="100" ppersist="40" fulldup="0" txtail="10"/>
    <audio type="alsa" device="plughw:CA0106" halfdup="0" capturechannelmode="MIC"/>
    <ptt file="/dev/ttyS1"/>
    <channel name="Channel 0">
      <mod mode="afsk" bps="1200" f0="1200" f1="2200" diffenc="1"/>
      <demod mode="afsk" bps="1200" f0="1200" f1="2200" diffdec="1"/>
      <pkt mode="KISS" ifname="sm0" hwaddr="" ip="" netmask="" broadcast="" file="/dev/soundmodem/0" unlink="1"/>
* The directory for the KISS device must be writable by the user who starts soundmodem so that the symlink to /dev/pts/<dev> can be created and deleted. ''Use {{{/tmp/soundmodem0}}}''
* A modulation type must be defined or soundmodem fails to start.
* soundmodem crashes with a "Broken Pipe" error. I thought the problem was sound volume, but even at very low volumes there is a problem. ''FIXED:'' by building a new version [[from source|Building SoundModem From Source]].
* With multiple audio cards, ALSA device numbers can change from boot-to-boot. ''Use names: {{{plughw:CA0106}}}''
TNC = Terminal Mode Controller

My TNC is a MFJ Multi-Mode Data Controller, model MFJ-1278B.

The default baud is 9600.

When using minicom to talk to the TNC, set automatic linefeed to {{{on}}} in minicom rather than having the TNC send a newline.

On my computer the serial port is /dev/ttyS0 and I configured the minicom default (dlf) settings for use with the TNC. 

After power on, any packets received should be displayed.

If CONVERS mode is entered, a break is necessary to get back to the prompt. The break signal is sent from the minicom menu (^A^Z) or directly ^A^F
Notes on setting up [[SoundModem|http://www.baycom.org/~tom/ham/soundmodem/]] on Ubuntu. This work was done on Ubuntu 8.04

@@''UPDATE:'' The soundmodem version in the Ubuntu archive does not work reliabley for me. I had to build soundmodem from source. See [[SoundModem From Source Instructions|SoundModem]] for more details.@@
* Use package from Ubuntu archive:
$ sudo apt-get install soundmodem
The installed programs are {{{soundmodemconfig}}} and {{{soundmodem}}}. {{{soundmodem}}} is in /usr/sbin.

See the [[SoundModem Problems]] tiddler for issues that I ran into.

!Utility commands
 * {{{cat /proc/asound/cards}}} - to get the list of installed sound cards.
 * {{{mheard}}} - lists the stations heard by AX25, assuming soundmodem and {{{mheardd}}} are running.
This wiki is based on [[TiddlyWiki|http://www.tiddlywiki.com]] and the wiki file is located on a removable USB memory stick. Some configuration is needed for smooth operation.

To avoid the Firefox security dialog, add the following two lines to {{{~/.mozilla/firefox/<profile>/user.js}}}. If the user.js file does not exist, create it with mode 644.
user_pref("capability.principal.DigitalCommCenter.granted", "UniversalXPConnect");
user_pref("capability.principal.DigitalCommCenter.id", "file:///media/geda_usb/DigitalCommCenter/wiki/index.html");
A sample user.js file is available in {{{/media/geda_usb/DigitalCommCenter/wiki}}}. If you still get the security dialog, check the permissions on the user.js file. The permissions must be 600.
!User Name
Set the username for signing edits on each browser. The username is saved as a browser cookie, so it must be set any time the browser is changed, cookies are cleared, or when the notebook is first used on a new computer.

Set the username by selecting {{{options}}} from the menu in the right column of the  this page.

!File Locations
To ensure that the wiki file is located at the same path on the multiple computers I use, the volume name on the memory stick is set to 'geda_usb'. That way the path is /media/geda_usb/... on all of the systems (of course this assumes mounting methods that are compatible with the Ubuntu distribution).
!File Permissions
Since the USB stick is used on multiple computers and since my UID is different on those computers, file access is controlled by group permissions. Set umask to 0002 so that new files are created with group write permission. The shell script {{{/media/geda_usb/bin/geda_env.sh}}} should can be sourced to set the appropriate umask.

To preserve the group settings on this wiki file, Firefox should be restarted from a command prompt (not the drop-down menu) after sourcing the geda_env.sh file. For example:
$ source /media/geda_usb/bin/geda_env.sh
$ /media/geda_usb/bin/start_firefox.sh

The shell script {{{/media/geda_usb/bin/setgrp_wx.sh}}} will, recursively, set group write permissions. It uses sudo(1) and will request your password.
!More Info
See the GettingStarted tiddler for basic information getting started with TiddlyWiki.
Xastir is a graphical APRS program.
Xastir is available from the the Ubuntu archives for Ubuntu 8.04.

You will have to install the [[Xastir Launcher]] by hand.

The national APRS frequency is 144.39MHz

To use Xastir with AX.25, Xastir must be run SUID. Use this command to set the permission:
$ sudo chmod 4755 /usr/bin/xastir
Xastir is not added to the main menu. The following steps will do the job:
* Install the 'extra-xdg-menus' package using {{{System->Administration->Synaptic Package Manager}}}
* Add an entry for Xastir as follows:
# System->Preferences->Main Menu
# Make sure "Ham Radio" has a check mark in the Items column
# Click on "Ham Radio" in the Menus column (left column)
# Click on 'New Item' button
# Enter the following:
**Type: Application
**Name: Xastir
**Command: /usr/bin/xastir
# You can leave the Icon blank or find one on the system. There are a number of icons in the /usr/share/pixmaps/ directory. Click on the 'Choose Icon' button and then type "/usr/share/pixmaps/" in the the entry field to the left of the Browse... button. After a moment or two a list of icons will be shown. Click on one of the displayed icons to select it and then click on 'OK' to exit the Browse Icons dialog.
# Click on the 'OK' to exit the Create Launcher dialog.

     That's it. You can now start Xasitr from the the main menu:
        Applications->Ham Radio->Xastir
{{{interceptty}}} is a little utility that can sit on top of a tty port and display the both input and output on the port. Written by Scott Gifford, the source code is available at: http://www.suspectclass.com/sgifford/interceptty/

The binary is installed in {{{/usr/local/bin}}} by default. There is a manual page but it is not installed.

$ intercept /dev/ttyS0 /tmp/snooptty
Now run {{{minicom}}} with {{{/tmp/snooptty}}} as the serial port. 

Note that port settings are not propagated from the {{{/tmp/snooptty}}} //port// to the real port at {{{/dev/ttyS0}}}.

Also note that {{{/tmp/snooptty}}} is a symlink to a {{{pty}}} port such as {{{/dev/pts/2}}}.

!!!Monitor commands to TS-440 control port
xterm1 $ intercept /dev/ttyUSB0 /tmp/snoopytty -s "4800  -parenb cstopb -crtscts"
xterm2 $ minicom -w snooptty
I previously defined {{{snooptty}}} as a configuration for {{{minicom}}} that uses {{{/tmp/snooptty}}} as the serial port.

The {{{IF;}}} string requests information from the TS-440. Both {{{IF;}}} and the response should show up in {{{mincom}}} and as output from {{{interceptty}}} in the xterm1 window.