• The KBOX3 project
KBOX3 limitations and known bugs
KBOX3 is a work in progress. There are some known bugs, which may at
some point be fixed. There are, however, some fundamental limitations which
can probably never be fixed, because Android is what it is.
KBOX3 is a single-user system
Like Android (essentially), KBOX3 is a single user-system. Within
the KBOX3 shell there is no concept of login or user credentials. All files
are owned by the same user — the user that owns the terminal emulator.
The user ID is itself aribtrary — a sequence of numbers with no particular
meaning — so it is nearly always necessary to specify a user ID
explicitly when using utilities that expect one.
Screen width and height will be different from a desktop system
Many Linux utilities are intended to work with a console 80 characters wide and
25 lines high. Even though the days of dumb terminals are long gone, a
lot of Linux/Unix software originates from those days. It's quite
difficult to get a display 80 columns wide on a small-screen device, and
still be able to read the text without a magnifying glass. Many utilties
provide a way to specify the width of the console; for
frotz takes a
-w NN switch for this
purpose. A few (very few) utilities can work out the console size using
ncurses library. Some utilities are hard-coded to
generate 80-column output, and there's no real way to change this
behaviour without modifying the code.
To make matters worse, the width and height of the console in characters
will change if you change the font size used by the Android terminal
This is a general problem of running console-based software on a device
that was never really intended for such a mode of operation. 10" tablets
behave better in this respect than cellphones.
Android is firewalled
Android does not readily allow incoming connections, and the firewall
settings cannot be changed by a non-root user. So, although KBOX
provides SSH and rsync servers, you might not be able to connect
to these services from outside the device. This behaviour varies
from vendor to vendor. In some cases, a workaround is to make a
connection from the Android device to the host that will be
initiating the network connection to the device. This may have the
effect of relaxing the firewall for that particular client/server
combination. However, this is fundamentally a restriction of
Android, and not one that is easy to work around.
Many networking utilities default to using port numbers in
the 1-1024 range
These ports are not available to unprivileged users. This means that even
if you can run an
ssh server without being blocked by the
firewall (see above), you'll need to tell both the client and the server
to use a port other than the default of 22. This applies to most
other network daemons also.
0001. "dpkg -i" sometimes fails with "can't create backup status file".
Work around by "rm -rf /var/lib/dpkg/status.udeb.bak". Cause currently
0002. "rm" sometimes fails with absolute paths. This seems to be a problem
with the rm implementation in the coreutils package, not in Busybox.
Cause unclear. The only solution, coreutils is installed, is to remove
/bin/rm and relink it to /bin/busybox.
0003. "scp" complains about missing "/usr/bin/ssh".
The rest of the Dropbear binaries install in /bin. Fixed by modifying
scp to look in /bin.
0004. Missing symbols in libssl.so.
OpenSSL package was more recent than the Android version, leading to
clashes. Fixed by removing all dependencies on OpenSSL, so the Android
version is used instead. Added a warning to the download page. Ideally,
it would have been better to use the later version, but the Android
installation cannot be changed without root permissions.
dlopen failed: cannot locate symbol "ctermid" referenced by "POSIX.so"
This problem arises because some versions of Android Bionic do not provide any
implementation of the
ctermid() function, but the Google NDK
cross-compiler does not know that. In some cases the problem may be
ameliorated by downloading this
modified version of POSIX.so and copying it
over te top of the original
I should point out however that
ctermid(), in common with
many console-related functions, will not do anything useful in Android, and
any application that expects it to work in a particular way will likely