Slackware 12.2 for the WebDT366

This board posts about running linux on your webdt366

Slackware 12.2 for the WebDT366

Postby quotaholic » Sat May 30, 2009 9:35 pm

Hello all,

I took a break to get myself moved to a new location. Here is a new image that I have been working on for a little while. I am not saying that this is complete however I am releasing it with intentions of moving on. Slackware 13.0 is on the horizon and that will be a little more advantageous than 12.2 for the WebDT. That being said please consider this 12.2 image for your DT as it really packs a lot of function.

Software included:

Alsa - Audio on linux
AnyRemote - Control your computer with a cell phone or.....
AnyRemote2html - Through a webpage
Audacious - Mp3 player
BlueZ - Bluetooth drivers
Cdrtools - Mkisofs is in here
Conky - System monitor
EPDF - PDF viewer
Evrouter - Event handler
Fuse - Userspace file system mounting
Gtk-Chtheme - Change your gtk theme
IceWm - Ice window manager
Isomaster - Manipulate iso's
Kismet - 802.11 analyzer
Leafpad - Editor
Matchbox desktop - Light weight desktop for embedded devices
Madwifi - Atheros tools
Make - Gnu Make
Minicom - Serial port program
Obexfs - Tool to mount bluetooth devices
ObexFTP - Transfer with bluetooth
Opera - Opera web browser
Pcmanfm - File manager
Pmount - Mounter
PPP - Cellular modem protocol
RT-61 firmware -
RT-71 firmware -
Slackpkg - Package management for slackware works like apt
Splashy - Boot loader image
Synergy - Share mice and keyboards over 802.11
VTE - Light weight terminal
Wicd - Network manager for both wired and wireless networks
WVDial - Cellular modem dialer
Xcalc - Simple calculator
Xchat - IRC chat
Xmahjonng - game

User login: webdt
User Pass: webdt
sudo pass: webdt
root pass : webdt

MD5 is in the archive:

This image weighs in at:

505964 total
391892 used
114072 free

Screen calibration is accomplished with:

"sudo gCal 4|9|25"

I prefer the 25 point calibration as it gives the most complete calibration.

Items that could use polishing in this image are the wireless configs in rc.d. I tried to script a network autologin without using wicd but later gave in and installed wicd. The files I changed cause a slight pause within init. Cisco 350 cards do not take out of the box. This will require tweaking. Lastly usb does not automount for some reason.

I left out blueman for two reasons. The blueman project has yet to respond to my bug reports on blueman-0.19 not working right in debian. Two, they do not offer a Slackware build.

If you would like to see a gui for connecting to and pairing bluetooth devices please consider taking the time to post on the forums and ask that support be made available for different distributions.

Due to some politics going on in and some recent changes made by HAL odd things are going on in linux. The Pcmanfm project sent me a letter recently asking for a vote. It seems that these HAL changes are forcing developers to use either Gnome or KDE dependencies to build upon. In particular how volumes and devices are mounted.

As's chairs are mostly gnome and kde developers this comes as no surprise. If you care about lightweight linux consider taking the time to let the blueman project or know that gnome and KDE dependencies are too heavy for the majority of portable devices. Including the DT.

Download link:
Last edited by quotaholic on Sun May 31, 2009 6:05 am, edited 1 time in total.
Posts: 556
Joined: Tue Mar 24, 2009 9:11 pm

Re: Slackware 12.2 for the WebDT366

Postby quotaholic » Sat May 30, 2009 9:46 pm

Almost forgot this one. Here is a script that I found that should allow one to mount a bluetooth device from within midnight commander file manager. Untested.

#! /usr/bin/env python

"""ObexFTP Virtual FileSystem for Midnight Commander

Author: Oleg BroytMann .
Copyright (C) 2004, 2005 PhiloSoft Design.
License: GPL.

Manipulate a cell phone's filesystem calling obexftp binary. This is a complete
user-mode solution, no kernel modules required (unlike SieFS or such). The
script implements all commands of Midnight Commander VFS, except for
undocumented "run"; anyway there are no runnable files in cell phones. The
script is written in Python because I I need to parse XML directory listings
from obexftp, and Python is the best of all languages suited for the task ;).

The script requires Midnight Commander 3.1+ (,
Python 2.3+ (,
OpenOBEX 1.0.1+ ( and
ObexFTP 0.10.4+ (

Edit the script, and correct the the full path to the obexftp binary (see
obexftp_prog below). Put the script in the /usr/[local/][lib|share]/mc/extfs,
and add a line "obexftp" to the /usr/[local/][lib|share]/mc/extfs/extfs.ini.
Make the script executable.

Create somewhere a transport file. The transport file may have any name, and is
expected to be a text file with at least one line defining the transport to
your device. Other lines in the file are ignored.

First word in the line is a transport name - Bluetooth, TTY or IrDA. The name
is case-insensitive.

For the Bluetooth transport put there a line "Bluetooth CP:AD:RE:SS channel",
where CP:AD:RE:SS is the hardware address of the device you want to connect to,
and "channel" is the OBEX File Transfer channel; you can discover the address
and the channel for your device by using commands like "hcitool scan" and
"sdptool browse".

For the TTY put the device name: "tty /dev/ttyUSB0".

For the IrDA: just put "IrDA" in the file.

Now run this "cd" command in the Midnight Commander (in the "bindings" file the
command is "%cd"): cd transport#obexftp, where "transport" is the name of your
transport file. The script uses obexftp to connect to the device and list files
and directories. Please be warned that opening the VFS for the first time is
VERY slow, because the script needs to scan the entire cell phone's filesystem,
and there are timeouts between connections, which don't make the scanning
faster. Midnight Commander caches the result so you can browse and manipulate
files and directories quickly.

Please note that manipulating the filesystem using your phone's internal
filemanager in parallel with the VFS leads to a disagreement between the VFS
cache and the phone. It is not very dangerous but inconvenient. There is no way
to clear the VFS cache in Midnight Commander and reread the filesystem. You
have to exit the VFS (cd /, for example) and return back using cd
transport#obexftp command. Sometimes even this doesn't help - Midnight
Commander shows the same cached VFS image. Exit Midnight Commander and restart

If something goes wrong set the logging level (see setLevel() below) to INFO or
DEBUG and look in the obexftp-mcextfs.log file. The file is put in the same
directory as the transport file, if it possible; if not the file will be put
into a temporary directory, usually /tmp, or /var/tmp, or whatever directory is
named in $TMP environment variable.


__version__ = "1.2.3"
__revision__ = "$Id: obexftp 36 2005-11-24 20:07:42Z phd $"
__date__ = "$Date: 2005-11-24 23:07:42 +0300 (Thu, 24 Nov 2005) $"[7:-2]
__author__ = "Oleg Broytmann "
__copyright__ = "Copyright (C) 2004, 2005 PhiloSoft Design"

# Change this to suite your needs
obexftp_prog = "/usr/local/obex/bin/obexftp"

import sys, os, shutil
from time import sleep
import xml.dom.minidom, locale
from tempfile import mkstemp, mkdtemp, _candidate_tempdir_list

import logging
logger = logging.getLogger('obexftp-mcextfs')
log_err_handler = logging.StreamHandler(sys.stderr)

if len(sys.argv) < 3:
ObexFTP Virtual FileSystem for Midnight Commander version %s
Author: %s

This is not a program. Put the script in /usr/[local/][lib|shre]/mc/extfs.
For more information read the source!""",
  __version__, __author__, __copyright__

tempdirlist = _candidate_tempdir_list()
tempdirlist.insert(0, os.path.abspath(os.path.dirname(sys.argv[2])))

found = False
for tempdir in tempdirlist:
      logfile_name = os.path.join(tempdir, 'obexftp-mcextfs.log')
      logfile = open(logfile_name, 'w')
  except IOError:
      found = True

if not found:
  logger.critical("Cannot initialize error log file in directories %s" % str(tempdirlist))


locale.setlocale(locale.LC_ALL, '')
charset = locale.getpreferredencoding()

# Parse ObexFTP XML directory listings

class DirectoryEntry(object):
  """Represent a remote file or a directory"""

  def __init__(self, type):
      self.type = type
      self.size = 0
      if type == "file":
        self.perm = "-rw-rw-rw-"
      elif type == "folder":
        self.perm = "drwxrwxrwx"
        raise ValueError, "unknown type '%s'; expected 'file' or 'folder'" % self.type

  def mtime(self):
      if not hasattr(self, "modified"): # telecom
        return "01-01-70 0:0"
      date, time = self.modified.split('T')
      year, month, day = date[2:4], date[4:6], date[6:8]
      hour, minute = time[:2], time[2:4]
      return "%s-%s-%s %s:%s" % (month, day, year, hour, minute)
  mtime = property(mtime)

  def __repr__(self):
      if self.type == "file":
        return """<%s: type=file, name=%s, size=%s, mtime=%s at 0x%x>""" % (
            self.__class__.__name__,, self.size, self.mtime, id(self)
      if self.type == "folder":
        if hasattr(self, "modified"):
            return """<%s: type=directory, name=%s, mtime=%s at 0x%x>""" % (
              self.__class__.__name__,, self.mtime, id(self)
        else: # telecom
            return """<%s: type=directory, name=%s at 0x%x>""" % (
              self.__class__.__name__,, id(self)
      raise ValueError, "unknown type '%s'; expected 'file' or 'folder'" % self.type

def get_entries(dom, type):
  entries = []
  for obj in dom.getElementsByTagName(type):
      entry = DirectoryEntry(type)
      attrs = obj.attributes
      for i in range(attrs.length):
        attr = attrs.item(i)
        setattr(entry,, attr.value)
  return entries

# A unique directory for temporary files
tmpdir_name = None

def setup_tmpdir():
  global tmpdir_name
  tmpdir_name = mkdtemp(".tmp", "mcobex-")

def cleanup_tmpdir():

def _read(fd):
  out = []
  while True:
      s =, 1024)
      if not s:
  return ''.join(out)

def _run(*args):
  """Run the obexftp binary catching errors"""

  out_fd, out_filename = mkstemp(".tmp", "mcobex-", tmpdir_name)
  err_fd, err_filename = mkstemp(".tmp", "mcobex-", tmpdir_name)

  command = "%s %s %s >%s 2>%s" % (obexftp_prog, obexftp_args, ' '.join(args),
      out_filename, err_filename)

  logger.debug("Running command %s", command)

  result = _read(out_fd)

  errors = _read(err_fd)

  logger.debug("    result: %s", result)
  logger.debug("    errors: %s", errors)
  return result, errors

def recursive_list(directory='/'):
  """List the directory recursively"""
  listing, errors = _run("-l '%s'" % directory)

  if not listing:
      logger.error("Error reading XML listing: %s", errors)

  dom = xml.dom.minidom.parseString(listing)
  directories = get_entries(dom, "folder")
  files = get_entries(dom, "file")

  for entry in directories + files:
      fullpath = "%s/%s" % (directory,
      fullpath = fullpath.encode(charset)
      if fullpath.startswith('//'): fullpath = fullpath[1:]
      print entry.perm, "1 user group", entry.size, entry.mtime, fullpath

  for entry in directories:
      fullpath = "%s/%s" % (directory,
      if fullpath.startswith('//'): fullpath = fullpath[1:]

def mcobex_list():
  """List the entire VFS"""

def mcobex_copyout():
  """Get a file from the VFS"""
  obex_filename = sys.argv[3]
  real_filename = sys.argv[4]

      _run("-g '%s'" % obex_filename)
        os.rename(os.path.basename(obex_filename), real_filename)
      except OSError:
        logger.exception("Error CopyOut %s to %s", obex_filename, real_filename)

def mcobex_copyin():
  """Put a file to the VFS"""
  obex_filename = sys.argv[3]
  real_filename = sys.argv[4]
  dirname, filename = os.path.split(obex_filename)

        os.rename(real_filename, filename)
        _run("-c '%s' -p '%s'" % (dirname, filename))
        os.rename(filename, real_filename) # by some reason MC wants the file back
      except OSError:
        logger.exception("Error CopyIn %s to %s", real_filename, obex_filename)

def mcobex_rm():
  """Remove a file from the VFS"""
  obex_filename = sys.argv[3]
      _run("-k '%s'" % obex_filename)

def mcobex_mkdir():
  """Create a directory in the VFS"""
  obex_dirname = sys.argv[3]
      _run("-C '%s'" % obex_dirname)

mcobex_rmdir = mcobex_rm

def transport_error(error_str):
  logger.critical("Error parsing the transport file: %s" % error_str)

def setup_transport():
  """Setup transport parameters for the obexftp program"""
      transport_file = open(sys.argv[2], 'r')
      line = transport_file.readline()
  except IOError:
      transport_error("cannot read '%s'" % sys.argv[2])

  parts = line.strip().split()
  transport = parts[0].lower()

  if transport == "bluetooth":
      if len(parts) < 3:
        transport_error("not enough arguments for 'bluetooth' transport")
      elif len(parts) > 3:
        transport_error("too many arguments for 'bluetooth' transport")
      return ' '.join(["-b", parts[1], "-B", parts[2]])
  elif transport == "tty":
      if len(parts) < 2:
        transport_error("not enough arguments for 'tty' transport")
      elif len(parts) > 2:
        transport_error("too many arguments for 'tty' transport")
      return ' '.join(["-t", parts[1]])
  elif transport == "irda":
      if len(parts) > 1:
        transport_error("too many arguments for 'irda' transport")
      return "-i"
      logger.critical("Unknown transport '%s'; expected 'bluetooth', 'tty' or 'irda'", transport)

command = sys.argv[1]
procname = "mcobex_" + command

g = globals()
if not g.has_key(procname):
  logger.critical("Unknown command %s", command)

  obexftp_args = setup_transport()
except SystemExit:
  logger.exception("Error parsing the transport file")

except SystemExit:
  logger.exception("Error during run")
Posts: 556
Joined: Tue Mar 24, 2009 9:11 pm

Re: Slackware 12.2 for the WebDT366

Postby ionbladez » Sat May 30, 2009 11:46 pm

Oh wow, does this also include the bluetooth headset audio drivers?
If not, I can install it.
About the PM, nevermind about the request it looks like you've provided everything I needed right now.
Thanks a lot.
Jr. Member
Jr. Member
Posts: 53
Joined: Sun Apr 05, 2009 8:25 pm
Location: Coral Springs, Florida

Re: Slackware 12.2 for the WebDT366

Postby quotaholic » Sun May 31, 2009 4:29 am

Hey ionbladez,

Slackware uses pre-built "tgz" files that are called slackbuilds. The package "slackpkg" is included and is one of two package managers out there. "Slapt-get" is the other. You should have everything you need to pair to a bluetooth device. Alsa-oss and the python-bluez is in there along with Midnight Commander.

If you find that you need more try:
Code: Select all

Code: Select all

Code: Select all
slackpkg search foo

Code: Select all
slackpkg install foo

and similarly
Code: Select all
slackpkg remove foo

Code: Select all
slackpkg clean

Let me know if you need to get slapt-get up and going as I have a few good mirrors I can offer. Slackpkg aims at the "official" slackware site but slapt-get can aim at any properly formatted repo. is an example.

There are tutorials on line about getting audacious outputting through bluetooth. I am three weeks away from getting my hands on a set of b/t headphones so forgive me as I dont have anything to test with. Found this and hope it helps out in getting things configured.

Let me know if this does not work for you as I have a 700 some megabyte slackware 12.2 started with all the build tools as a backup plan.

Last edited by quotaholic on Sun May 31, 2009 5:58 am, edited 1 time in total.
Posts: 556
Joined: Tue Mar 24, 2009 9:11 pm

Re: Slackware 12.2 for the WebDT366

Postby Elwgreen » Thu Jun 04, 2009 4:51 am

I just received my 366. I was thinking of changing from ce to a linux version. I noticed this load has a cellular modem dialer. I have a pcmcia Sierra wireless aircard. Do you think this version would recognize it?
Posts: 8
Joined: Thu May 21, 2009 2:27 pm

Re: Slackware 12.2 for the WebDT366

Postby quotaholic » Thu Jun 04, 2009 8:27 am

It should. I would say try it and let us know.... You will need to adjust /etc/wvdial.conf to reflect settings for your carriers network.

I just moved in with an old friend who happens to be a cell technician. I took his sierra card and plugged it in. On init I saw it get recognized as a sierra radio modem. I have not tried to gain access to the network just yet as he is always using his card. I would say yes but if by odd chance it does not either we can add the needed packages with "slackpkg" or the next image I make will support cellular dialing for sure before I release it.

Posts: 556
Joined: Tue Mar 24, 2009 9:11 pm

Re: Slackware 12.2 for the WebDT366

Postby Elwgreen » Thu Jun 04, 2009 1:43 pm

i am trying to decide whether to go linux or xpe. My plans for this is general web browsing but need to show small powerpoints and pdf files. i also need excel. this can be open office instead of micrsoft. i have ubuntu on my home pc dual booted to xp. i like linux. Iam in sales and do double duty as an application engineer which is why i purchased this tablet. Which would you recommend giveen your knowledge of the 366?
Posts: 8
Joined: Thu May 21, 2009 2:27 pm

Re: Slackware 12.2 for the WebDT366

Postby quotaholic » Thu Jun 04, 2009 7:48 pm

Space is my first concern. Open office is not a small program. I have a hard time building a linux image that takes up less than 300 meg with web browser on Slackware. Debian is larger at about 325 or more for the same. Although I am not familiar with how to do this one can apply a union compression to the file system and make much more fit in 500 megs.

My first thought is can you work with google docs? Anticipating the google gears question coming I will have to look in to if the DT can support it. I know nothing on XPe so I could not advise however there are some here who could contrast for you. Hynu is someone who comes to mind.

I used to work for a robotics integration house. These would have come in handy there.

Posts: 556
Joined: Tue Mar 24, 2009 9:11 pm

Re: Slackware 12.2 for the WebDT366

Postby david_halliday » Thu Jun 04, 2009 11:01 pm

I have also started looking at Puppy. It is about 100Meg and includes lots of nice tools but im having problems getting the touch screen to work. I hope to look at it more over the weekend and will keep you all posted.

Posts: 84
Joined: Wed Apr 01, 2009 3:13 pm

Re: Slackware 12.2 for the WebDT366

Postby Elwgreen » Fri Jun 05, 2009 6:21 am

I really appreciate your help. Can you install programs to a CF?
Posts: 8
Joined: Thu May 21, 2009 2:27 pm

Re: Slackware 12.2 for the WebDT366

Postby quotaholic » Fri Jun 05, 2009 7:01 am

Umm in a way yes and in a way no.

In windows I believe its ewf that allows one to keep "portable" apps like firefox and vlc on a thumbdrive. I do not know of a linux equal to this functionality. Worth investigating though as I truly do not know much.

If you found a distribution you liked you could explore sym links. sym links are pretty neat but they may cost you performance as the usb speed is only usb1.1. The CF slot is bridged to the usb thus limiting its speed. One member here has reduced his internal flash usage to below 40 percent through the use of sym links. In doing so he moved his "applications" folder to the cf card.

I've been reading up on compressing individual folders. Unfortunately this requires space to move things around within. What is your deadline for having the functionality you seek? I ask as the remaining tricks I have up my sleeve are fairly involved and may take a few weeks to produce something. Thinking along the lines of embedded qt or open embedded. As both are unfamiliar there is a "break in period" involved. Then build time.

It just came to me but you should try out the Nimblex2009 image. It will be dirt slow on a usb stick but it will allow you to get things tested as far as function. If you like it its not too hard to install to the internal flash. Nimblex was designed to run on usb stick. It uses LZMA compression to pack a fully featured operating system on to a small thumb drive. I THINK ooo is on there. Be warned though that Nimblex 2009 webdt version is a work in progress. Some things may not be 100 percent.

Posts: 556
Joined: Tue Mar 24, 2009 9:11 pm

Re: Slackware 12.2 for the WebDT366

Postby andrewmo » Tue Jun 30, 2009 8:54 am

First of all thanks for building this forum and the great amount of knowledge that one can find here.

I just bought an used WebDT366 with win ce 5.0 preinstalled and I wanted to remove it and put your slackware distro... i put it on usb with win32diskimager and it was booting fine... started loading the installer etc... and it got the the following point:
md: ... autorun DONE
VFS: Mounted root (msdos filesystem) readonly.
Freeing unused kernel memory: 36k freed
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel"

What shall I do?

Posts: 1
Joined: Tue Jun 30, 2009 8:14 am

Re: Slackware 12.2 for the WebDT366

Postby quotaholic » Tue Jun 30, 2009 9:25 pm

Using a native linux tool called dd I image my hard drive in raw form by writing a .img to a external drive. I do not believe this to be compatible with any windows tool other than dd for windows and even then reports are that its shaky.

Being the linux guy that I am I suggest getting an image of slax 6.1.1 and put it to a thumb drive and make that thumbdrive bootable. Instructions for that should be on the slax site. Its pretty simple. Slax is one of few os's out there that reads the hardware correctly on the DT. Once you get that far refer to this post:

The instructions there mention a different image however they apply to all the images I have made.

Let me know how it goes
Last edited by quotaholic on Tue Jun 30, 2009 9:29 pm, edited 1 time in total.
Posts: 556
Joined: Tue Mar 24, 2009 9:11 pm

Return to Linux on a WebDT366?

Who is online

Users browsing this forum: No registered users and 2 guests