because the internet

at last!

since the early days of first getting to play with a raspberry pi i always, first jokingly but more seriously over time, wondered if it would be able to display a riced out i3 window manager. but this was before i really knew anything about the real gnarly under-hood workings of linux - desktop vs window managers, login screens, sessions, xsessions, x…

orange pi3 one+

orange you glad it’s not a ras-pi?

the above was deployed using the ever-useful Armbian’s dev build for the Orange Pi One plus, in particular the bionic/server build of the current Ubuntu LTS version. the reason for this is that ubuntu has a pretty nifty feature that gives it a slight advantage over Debian - the Launchpad/PPA concept, which lets one quickly and (relatively) securely add unofficial repositories to your APT sources. (Think AUR for Debian.)

as it turns out, however, I don’t think i actually wound up using anything from the kgilmer/speed-ricer repositories - on second thought, I think i might have used the i3-gaps-session package which i should probably download and have a look at because i’m not sure what is in it, but i do know that installing it makes all the other components come together smoothly - X11, lightdm, i3, etc.

an important feature for me is transparency - it’s what makes this a sort of personal accomplishment. running i3 on a devboard isn’t really too difficult to do, but compton does eat up resources, which are always in short supply on an SBC. i recently devolved from a multi- to a single-monitor setup for various reasons (focus being the main one, more deskroom for new speakers being the second) and so something i have come to rely on is a little hotkey script i wrote to toggle a window’s transparency - saving me from having to continually raise a window above another by letting me just peek underneat the abovemost application.

with a meaty 1.8ghz of power, the orange pi one plus manages to handle compton fairly well, despite the utter lack of true gpu acceleration. (the allwinner H6 allegedly has a built-in gpu, but official support is lacking-to-nonexistent and community support is lackluster as current information seems to indicate allwinner isn’t making any long-term commitments to this cpu)

if you’re familiar with the sort of general devboard community, you might be familiar with the somewhat amusing story behind a board known as the Atomic Pi. tl;dr is that after what seems to be a failed product launch, a small group formed a company, purchased a large stock of SBC boards which were meant to power the doomed product, whipped up some accessories to make it more usable, and hawked it as a new powerhouse devboard whose main selling point is its x86-based intel atom processor, which meant you could theoretically run a straight-up copy of windows on it. of course selling it for ~$40 a pop immediately got people digging into it, which is how this was all discovered.

realizing it was basically a one-shot item, interest quickly dropped off as any sort of project aimed at going to market or being widely used would require a platform that can be reasonably expected to be around, and updated over time. that being said - it has been hard for me to resist the temptation to buy one, because of course it seems like a potentially phenomenal base for a small, fullblown linux installation capable of running a graphical desktop reliably and easily. especially now, as it seems as of this post you can pick one up with the addon for running a 5v power cable to it for around 30 bucks. the only thing keeping me back now is the fact that i now have a sizeable collection of devboards laying around, and the realization that i could have saved the money spent on a few of them to instead invest in a pricier, but far more solid board capable of doing the sort of thing i would like, which is more or less a desktop computer i can toss in my pocket. i know the immediate thought here might be “you have one already it’s called a cellphone”, but while this is technically correct, i cannot plug 3-4 usb devices and an HDMI cable into my cellphone, and i also chafe at the idea of my activities always being at risk of being surveilled by either the ever-connected cellphone carrier or a clandestine agency piggybacking on the carrier’s servers.

share the loot!

i am really, really bad at documenting things as i go along, and even worse at sitting down after to do a writeup. so odds of writing up a guide for someone new to playing with sbc’s might be out of luck. if you’re familiar with linux and using a terminal, and have experience with raspberry pi’s but preferably other boards as well, here is a gist i cribbed which should be the basis for a guaranteed build of i3 with the gaps and round-edge features added, which works on both the x86 and arm architectures.

# ubuntu install for i3 

# deps
# ----
# sudo apt install libxcb1-dev libxcb-keysyms1-dev libpango1.0-dev libxcb-util0-dev libxcb-icccm4-dev libyajl-dev libstartup-notification0-dev libxcb-randr0-dev libev-dev libxcb-cursor-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev autoconf xutils-dev libtool 


# manual compile for a needed dep
# ------------------------------
# mkdir tmp
# cd /tmp
# git clone https://github.com/Airblader/xcb-util-xrm
# cd xcb-util-xrm
# git submodule update --init
# ./autogen.sh --prefix=/usr
# make
# sudo make install 

# i3 build 
# --------

# i3-gaps-rounded: 
# git clone https://github.com/resloved/i3 

# i3-gaps: 
# git clone https://www.github.com/Airblader/i3 i3-gaps

# cd i3(-gaps)
# git checkout gaps && git pull [i dont think this is necessary when working with the resloved fork]
# autoreconf --force --install
# rm -rf build
# mkdir build
# cd build
# ../configure --prefix=/usr --sysconfdir=/etc --disable-sanitizers
# make
# sudo make install

# extras
# ------
# sudo apt-get install wget ranger mediainfo highlight tmux calcurse  newsbeuter moc qutebrowser imagemagick transmission-cli atool xcompmgr blender pinta gimp  markdown mupdf evince audacity vim-latexsuite rsync syncthing cups screenfetch scrot unzip unrar biber ntfs-3g deepin-terminal zip irssi unzip

it works on ubuntu as well as debian. i am still refining the needed dependencies - ie, i’m not sure if there’s some packages that don’t come with a fresh OS install, that i wound up adding for some other project. a general rule of thumb here is, if you can spare it, downloading all the libxcb and libxkb *-dev packages will save you alot of hassle and frustration. ideally these would already have a meta-package candidate, but i guess the obvious thing to say here is: perhaps it falls on me to do my part and contribute such a thing to the ocean of code out there.

anyways, once the above xcb-util-xrm and i3 packages are built, the shortcut method to a quick setup is pretty much using apt to install xorg, lightdm, and then first installing the i3 meta-package to get all the little items that make it all play nicely together - and then going back into your i3 build folder and doing a sudo make install to replace the standard copy of the i3wm with your homemade, feature-added copy. after that the world is yours, i like to configure my install to boot into a console where i can choose to then run a desktop or remain on the commandline. and of course i will also go on to install and configure both compton and polybar to complete my current desktop setup preferences.

hot soft ware

i3-gaps-rounded is an easy candidate here. i3 is already the choice of aesthetically-minded geeks that combines the tech-savvy pleasures of a window manager with a fairly easy setup process. this particular fork contains the wildly popular gaps modification, which… i mean, what can you say, it’s all there in the title: it adds gaps between the individual windows. on top of that, for those chasing the latest and greatest in desktop aesthetic, the rounded features adds support for the shape feature introduced in X11, which… i mean if you can’t figure out what this is by context clues, i applaud you making it this far into this post but highly recommend looking for something else to do for a project :)

wsltty aka mintty with some tweaks aimed at using with the Windows Subsystem for Linux, this might, oddly enough, be the most complete* terminal emulator i have ever used, and not only on Windows. everything pretty much just works, and what little issues might arise out the gate can quickly and easily be corrected, most of the time by playing with the minimal settings or declaring a particular environmental variable. pound-for-pound, i have never used a terminal on any OS that does this well covering all the main aspects I consider to be important to a terminal emulator: stability, simplicity, capability, and of course, aesthetics. to put it in perspective: as a devout WSL user alot of documentation out there places emphasis on the various limitations you will encounter when using a windows-based application to operate in a Linux environment - issues with handing the Meta key, commandline support for mouseclicks, character rendering, ability to support graphics, et cetera. however, if i am exaggerating here it is only slightly, when i say i have more issues like that when using linux terminals on an actual linux installation, than i do using wsltty and wsl.

to see how it handles a variety of things like 24-bit colors, mouse support, character support and more, check out this screenshot of this very post being edited on what you might not even recognize initially as a winows 10 desktop session.

*i should add a caveat that ultimately you can always wind up with a far better terminal emulator in Linux if you have the know-how and time to devote to it; i am specifically discussing the out-of-box experience above.

anyways that’s enough for me today, and i guess this year. i sat down and started cranking this out as a way to distract myself from my frustrations trying to salvage a broken mini-fan to use on a devboard, but i must now go bite the bullet and keep at it - that orange pi mentioned above is a spicy little monster, and aircooling is absolutely a requirement for it. later gators,