uConsole Notes for Review

I’m working on a review of the uConsole for my youtube channel, so I’d like to hear some other people’s thoughts on the device in case I miss anything. Feel free to reply here if you’d like to help out! :slight_smile:

So far I’ve got a few:

  • overall feels well built
    • aluminum case feels premium
    • keyboard is nice and clicky
    • all the input is good and comfortable, the trackball feels nice
    • keyboard doesn’t have a dedicated super key
    • occassional debouncing issues
    • keyboard backlight is not even
    • display is good, and gets BRIGHT
    • hump can be a little uncomfortable, or great (depends on how you hold it)
    • printing does smudge easily (wish it was laser etched)
    • some printing fades quickly
    • clockwork logo crooked
    • wish the USB port didn’t have the metal exposed like that
    • stand can be uncomfortable, though is nice
    • built like a tank
    • spilled some french onion soup on it, will update with any potential issues
  • software is lacking
    • recompiling the kernel is broken
    • sms support is broken, had to write my own driver
    • cellular support is iffy, recently updated
    • call audio is separate from pulse, may be able to fix
    • power management is not fully functional (kernel module hell)
    • battery life could be longer
    • OpenGL only goes upto 3.1
  • hardware
    • A06 has been a bit unstable
    • A06 is years old hardware – and it shows
    • crashes, lot’s of them
    • 3.5mm is noisy, mic doesn’t work
    • though the speakers are nice
    • speaking of audio, pulseaudio occasionally breaks, requires a kill or restart
    • i wish the 3.5mm and speakers were different in pulseaudio
    • HDMI out broken on mine, unsure of cause
    • usb-c is nice
    • no usb-c data
    • can get HOT, like 60-70C on the CPU, and (insert temp here) on the back
    • antennas aren’t too strong, had to mod it
    • GPS non-functional out of the box
    • had some charging issues
    • standard 18650’s
    • crashes around high speaker volumes
    • didn’t get warm enough to keep me warm

my thoughts while still waiting on mine, but based on specs and experience on the devterm:

great price for what you get.
not much competition in the form factor
it’s nice to have options for the core
more vertical pixels than the devterm will make guis more useable
personally not a fan of the 4g, would have preferred other/more options.

it’s really made for ‘hackers’, not in the way of a hacking tool, but in the way that you need some skills to have fun with it and get it work.
there are already plenty of user mods. Including backplates for larger batteries, and expansion modules for more USB ports. hoping for some SDR and LoRa modules.

from having used the devterm since it came out, for me the IO on the uconsole is still enough.The a06 is plenty fast enough for most things you’d want to do on something this small, unless you compile big things on it… that takes time. battery life could always be better, but it’s fine imo. the speakers might be a software issue. they are the same on the devterm. sound horrible with sdrangel, but perfectly fine (for the size) on gqrx.
the software is lacking, but that’s up to the community to fix. the documentation is all there AFAIK.

IMO this is the “hottest mini computer” on the market right now. one of the most affordable and hackable, and smallest devices that can run “full Linux” in a graphical environment. And the software support is probably much better if you go with the raspberry version. (but where is the fun with that?)

as for the heat issue, that depends on what you do on it. you can under-clock it quite considerably. especially the a06 makes this easy with a CLI tool.


Thanks for the review. I have several different machines. The DevTerm with CM3 and the uConsole with R-01, CM4S, and the CM4 modules. I am really picky on the keyboard and like the one on the DevTerm way better than the one on the uConsole. I have even 3D printed a couple of keys to see if not using the rubber one was better. So far it doesn’t improve things for me by that much. I really don’t need the backlight under most conditions and I removed the white light spreader between the PCB and the rubber membrane and that seemed to make it a bit better. I do understand that keyboard preferences are a personal thing.

I’m really impressed by the uConsole. With the CM4 core it’s the best Raspberry Pi kit I’ve ever seen. But I have some disagreements with your notes.

The display has issues. I wouldn’t accuse it of having good saturation or color accuracy. There’s significant screen tearing. If you leave it on and let the display go dark, when you wake the device you’ll notice image retention and vignetting.

It’s possible that some of the issues are software related, as the display currently requires a kernel patch to boot… and everything might not be configured properly.

On that note, ClockworkPi needs to do more to provide up-to-date operating systems or provide resources for compiling operating systems that work with newer Linux kernels. A standard Raspberry Pi OS image (or Armbian on the A06) will not boot when installed in a uConsole, which means that we’re relying on a third-party for updates — a third-party that isn’t always great about documentation or software.

Also on the software side, ClockworkPi could fix the power management to properly charge and accurately measure the two 16850 batteries.

I’d thank you for mentioning these issues in a review because these are three things that ClockworkPi could fix to significantly improve the uConsole.

All fair points. I’ll note that my description of the screen was more in relation to the panel itself, tearing is an issue with either the GPU not being performant enough, or v-sync not being enabled.

I’ve noticed image retention once, but not since then, even after having images on for a while, not sure about that one. Also haven’t noticed any vignetting.

cpi could definitely do better at keeping the system up-to-date; once I get the kernel properly compiling I’m thinking of providing a custom Armbian image for the A06 (or CM4 updates if/when I get one of those) and making my free-time “fix cpi shit o’clock” lol.

Power management definitely needs to be fixed. I’ve gotten some of it to work, but it’s not done yet, and super janky.


I have purchased multiple uConsoles variations- the A-06, then later the R-01 since it appeared the delivery of the R-01 were occurring and A-06 were delayed - Later I ordered separately the CM4 lite adapter to augment the R-01 unit - all purchases came within two months of each other… (although ordered over the span of a year) The CM4 lite 4G memory sans the EMMC, and onboard wifi… was ordered from a third party … I’ve assembled and used both the R-01 and the CM4 and retaining the A-06 kit for for spare parts (motherboard, etc) the CM4 with 4GB is responsive and appears to run webpages and other applications with little lag… I like the keyboard similar to TI calculators . Screen is crisp and lively - I’ve used double sided foam to provided some space between the wifi antenna and the housing and have not seen the week wifi performance others have complained about - External screen is useful. Using Logitech multiple device products to use the uConsole in conjunction with a laptop setup.

1 Like

just some added notes for 9001> firmware on 4g. Sms isn’t broken, as with all things linux, No one has cared to add proper support for the things people want to do. Here is some documentation and some code examples, they still apply here,

some of the examples, the sms code, pyaudio code for calls, etc can be ported over and made into proper utilities.

I haven’t had much chance to play with it yet, but there are at least a couple gripes with mine.
Namely, the trackball/mouse doesn’t work well for me when trying to move the mouse about quickly (which is most of the time), the batteries having to be 18650 only and no bigger means i have to keep myself tethered in my experience (should move to new Samsung 30A batteries soon though).
And then some things annoying which i would like to have it easier, like knowing a case that it just fits snugly; easier to set up Wi-Fi where i think it’s just an issue with the image that comes from factory and i need to set up new SSiDs through terminal, and vim doesn’t work as usual; or the keyboard which is a pain to handle for shortcuts, many of the buttons don’t work as expected on terminal and are mapped differently on different apps somehow, and can’t imagine using i3 on it. These things hopefully it’s because it’s not as polished as commercial hardware/software as this is meant to be, hackable and all…

it’s broken for me on 9011 iirc, i upgraded

kill modemmanger

killall /usr/sbin/ModemManager

grab minicom, connect to ttyUSB2 and then run the following:

then send yourself a message while your still attached to the port. you should see it come across plaintext.

Now if that works you can do the following :slight_smile:

sudo over to root:

apt-get update
apt-get install smstools

edit /etc/default/smstools
change USER to root

delete /etc/smsd.conf
create a new /etc/smsd.conf with the following

# /etc/smsd.conf
# Description: Main configuration file for the smsd

devices = GSM1
outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
incoming = /var/spool/sms/incoming
logfile = /var/log/smstools/smsd.log
infofile = /var/run/smstools/smsd.working
pidfile = /var/run/smstools/smsd.pid
outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
failed = /var/spool/sms/failed
incoming = /var/spool/sms/incoming
sent = /var/spool/sms/sent
stats = /var/log/smstools/smsd_stats
loglevel = 7
delaytime = 10
#errorsleeptime = 10
#blocktime = 3600
#stats = /var/log/smsd_stats
#stats_interval = 3600
#stats_no_zeroes = no
#checkhandler = /usr/local/bin/smscheck
receive_before_send = no
# autosplit 0=no 1=yes 2=with text numbers 3=concatenated
autosplit = 3
# store_received_pdu 0=no, 1=unsupported, 2=unsupported and 8bit, 3=all
#store_received_pdu = 1
#validity = 255
#decode_unicode_text = no
#internal_combine = no
# You can specify here an external program that is started whenever an alarm occurs.
# alarmhandler = /path/to/an/alarmhandler/script
# Specifies what levels start an alarmhandler. You can use value between 2 and 5.
# alarmlevel = 4
# eventhandler = @EVENTHANDLER@
#blacklist = /etc/smstools/blacklist
#whitelist = /etc/smstools/whitelist

# Commented lines are examples for germany
# D1 = /var/spool/sms/D1
# D2 = /var/spool/sms/D2
# O2 = /var/spool/sms/O2
# EPLUS = /var/spool/sms/EPLUS
# QUAM = /var/sppol/sms/QUAM
# MOBILCOM = /var/spool/sms/MOBILCOM
#OTHER = /var/spool/sms/OTHER

# Commented lines are examples for germany
# D1 = 49160, 49170, 49171, 49175, 49151
# D2 = 491520, 49162, 49172, 49173, 49174
# O2 = 49176, 49179, 49159
# EPLUS = 49163, 49177, 49178, 49157
# QUAM = 49150
# MOBILCOM = 49156
#OTHER = 0,1,2,3,4,5,6,7,8,9

device = /dev/ttyUSB2
init = AT+CMGF=1
init1 = AT+CNMI=2,2,0,0,0
incoming = yes
baudrate = 115200
eventhandler = /usr/bin/sms
#mode = new
rtscts = no
#mode = new

save that file

create a new file /usr/bin/sms
paste in the following.


# $1 is the type of the event wich can be SENT, RECEIVED, FAILED or REPORT.

# $2 is the filename of the sms.

# $3 is the message id. Only used for SENT messages with status report.

if [ "$1" == "RECEIVED" ]; then

# read received SMS line by line

        while IFS= read -r line || [ -n "$line" ]


                if [ -z "${BODY+set}" ]; then

                # variable BODY not defined

                        # separate key-value pairs

                        KEY=$(echo ${line} | cut -d':' -f1 )

                        VAL=$(echo ${line} | cut -d':' -f2- | cut -d' ' -f2- )

                        case "$KEY" in








                                        # Data behind Lenght belong to body, so define BODY here





                        # append every body line



        done < $2

        # If we got a body, then forward
        if [ -n "${BODY}" ]; then

                echo "=> forwarding SMS now"
                DISPLAY=:0 sudo -u cpi notify-send "Sms From $FROM" "$BODY"
                # rename file
                mv $2 $2.forwarded


                echo "no mail body found"


        # delete oldest *.forwarded files, but keep 5 files

        cd /var/spool/sms/incoming

        ls -1t *.mailed 2>/dev/null | tail -n +6 | xargs rm -f


exit 0

save and run chmod +x /usr/bin/sms

create a new file called /usr/bin/sendsms
paste in:

# This script send a text sms at the command line by creating
# a sms file in the outgoing queue.

# $1 is the destination phone number.
# $2 is the message text.
# If you leave $2 or both empty, the script will ask you.
# If you give more than 2 arguments, last is taken as a text and
# all other are taken as destination numbers.
# If a destination is asked, you can type multiple numbers
# delimited with spaces.

# Keys for example: "password" and "keke":
# KEYS="5f4dcc3b5aa765d61d8327deb882cf99 4a5ea11b030ec1cfbc8b9947fdf2c872 "


# When creating keys, remember to use -n for echo:
# echo -n "key" | md5sum


# Will need echo which accepts -n argument:
case `uname` in

if ! [ -z "$KEYS" ]; then
  printf "Key: "
  read KEY
  if [ -z "$KEY" ]; then
    echo "Key required, stopping."
    exit 1
  KEY=`$ECHO -n "$KEY" | md5sum | awk '{print $1;}'`
  if ! echo "$KEYS" | grep "$KEY" >/dev/null; then
    echo "Incorrect key, stopping."
    exit 1


if [ -z "$DEST" ]; then
  printf "Destination(s): "
  read DEST
  if [ -z "$DEST" ]; then
    echo "No destination, stopping."
    exit 1

if [ -z "$TEXT" ]; then
  printf "Text: "
  read TEXT
  if [ -z "$TEXT" ]; then
    echo "No text, stopping."
    exit 1

if [ $# -gt 2 ]; then
  while [ $n -gt 1 ]; do
    destinations="$destinations $1"
    n=`expr $n - 1`

echo "-- "
echo "Text: $TEXT"

if which iconv > /dev/null 2>&1; then
  if ! $ECHO -n "$TEXT" | iconv -t ISO-8859-15 >/dev/null 2>&1; then
    ALPHABET="Alphabet: UCS"

if [ -f /etc/group ]; then
  if grep $smsd_group: /etc/group >/dev/null; then

for destination in $destinations
  echo "To: $destination"

  TMPFILE=`mktemp /tmp/smsd_XXXXXX`

  $ECHO "To: $destination" >> $TMPFILE
  $ECHO "" >> $TMPFILE
  if [ -z "$ALPHABET" ]; then
    $ECHO -n "$TEXT" >> $TMPFILE
    $ECHO -n "$TEXT" | iconv -t UNICODEBIG >> $TMPFILE

  if [ "x$group" != x ]; then
    chgrp $group $TMPFILE

  chmod 0660 $TMPFILE

  FILE=`mktemp /var/spool/sms/outgoing/send_XXXXXX`

save and run chmod +x /usr/bin/sendsms

if you dont have modemmanager disabled, youll need to kill it or this wont work
killall /usr/sbin/ModemManager
now when you get an sms, it should pop up in a little window on the desktop. you can change this to do whatever you want but I like it popping up.
to send you can just run sendsms 19992223333 “this is a text”

my problem is my modem doesn’t seem to receive the SMS’s now at all after upgrading to 9011

Right, so run those first two at commands and send yourself an sms while your in a serial session with the modem

i have. after doing so it still does not receive SMS’s. as well, if i send at+cmgs="...", it prints > line after line until it overflows.