Connecting a headless Raspberry Pi to a wireless network can be quite a paradoxical situation. To connect it to the network, you need to open an SSH connection to configure the wireless port. But to do so, you need a network connection in the first place. Of course, you can still get command-line access using a USB-to-UART adapter or the Pi’s ethernet port – if present – but [Arsenijs] worked out a much more convenient solution for his Hackaday Prize entry: The pyLCI Linux Control Interface.
His solution is a software framework written in Python that uses a character display and buttons to make a simple hardware interface. This allows you to configure all important aspects of a Raspberry Pi – or any other Linux SBC – from a tidily organized click-and-scroll menu. [Arsenijs] implemented a whole bunch of useful tools: There’s a network tool to scan and connect to WiFi networks. A systemctl tool that lets you manage the services running on the system, which is especially helpful when you need to restart a stuck service. A partition tool helps with viewing and unmounting mass storage devices. He’s even planning to add a filesystem browser.
With his Open Source project, [Arsenjs] aims to shorten the development time for embedded projects by taking out the efforts of implementing the basic interface functions from scratch. Indeed, there are countless scenarios, where a basic display interface can be of great value. Given the great project documentation and the fact that this can work with virtually any Arduino or Raspberry Pi LCD-pushbutton-hat or shield, we’re sure this is going to be used a lot. Enjoy the video!
[Edit: A few corrections according to information provided by the project owner have been made.]
17 thoughts on “Hackaday Prize Entry: An Interface For The Headless Linux System”
It’s much easier to do this:
Put Pi SD card into Linux PC
Mount main partition
Edit network files
I can fully see value in a ‘craft interface’ for a headless network device. if it dhcp’s to get an addr, yes, I DO like seeing it on the lcd. yes, I really truly do. ;)
on my gps strat-1 rpi box, I have an lcd display that cycles around and shows the time, gps stats, uptime, so on. lcdproc simple stuff but I never have to wonder what its ip is or even if its got an addr.
I’m doing a music server, now, too; and that will also have a small display (maybe those common oled i2c 128×64 displays) that will show its boot status, its ip-addr and some other simple status.
truly headless servers are annoying. I aint got time for that shit.
Now you don’t have to. The PI copies wpa_supplicant.conf from /boot/.
That covers only a small part of what pyLCI can do. It also can show your network addresses, restart services, list USB devices and so on and so on. Not so much you can do by editing configuration files.
That depends entirely on how often you need to do it and if you have a main PC with an SD card reader present.
Does Pi support this out-of-the-box? If not, then you need to configure Pi to be able to configure it… How is that less paradoxical?
it seems like it. i initially thought it is a way to drop this in the image before even getting to the pi….but it does not seem like it.
Because otherwise you’d need to configure it each time something changed. For example, you are somewhere far from your home and need to connect to a wireless network. Right now, you can connect your Pi to an open network or to a saved encrypted network using just pyLCI. If you need to connect to an unknown secured network, you can connect your Pi to an open network (say, your smartphone’s) and enter the credentials, which your Pi will then remember and be able to connect to that secured network. S, Soon, I’m adding input UI elements so that you’ll be able to input passwords for secured networks without SSH’ing at all.
I understand that in some scenarios this might be useful, heck, I could use it sometimes for my MPD-based in-car Pi myself…
Still, in the scenario you describe, wouldn’t it be possible to script Pi in a way that, if a specific network (i.e. your smartphone’s access point, which could also be secured) is present, it downloads a specific file from your phone and uses it as credentials for the other secured network? Just wondering…
No reason that’d be impossible. Would it be a better solution in case of this single problem? Yes. However, pyLCI is not made to solve this single problem. You might want to check your IP address after you’ve connected, for example, and it isn’t easily solved with configuration files. You can find another solution for that, of course, but so far adding yet another application for pyLCI is easier, and there are plenty of them for solving the most important problems – for example, plug&playing HDMI displays with the correct resolution and unmounting mounted drives.
First of all, it’s not a HAT =) It’s a software framework that accomodates button&display shields, HATs and displays&buttons in general. It’s meant to be DIYed, and it can be added quite cheaply to your projects – by being not limited to any hardware (except for the temporary limitation of using HD44780-compatible displays). You just configure the appropriate drivers for the devices you’re using and it’s working. Worst case – you write your own drivers or request a driver to be added, I can help with this.
Second thing is – it’s extensible. You can write applications for your projects if you need to, and I did my best to make it easy by documenting the necessary aspects. You’re not limited by the applications I’ve written =)
Third thing is – there are more apps for this to come. Among the most important is MPD control, for example, but the development is going on. I plan on making this interface much more powerful and therefore useful.
Reminds me of my little Qubes and Raqs :)
Well, everything new is well-forgotten old, as we Russians say =) I’ve seen plenty of similar interfaces on older tech, and for me this certainly was lacking.
Don’t get me wrong, I like the project :)
No worries, I didn’t get you wrong =) I hope this is useful on homebrew servers and such. At least, as soon as I add input UI elements, it’ll be much more suitable – you’ll be able to change all sorts of things, such as system settings and network settings in particular, service configuration files and wireless passwords =)
“An Interface For The Headless Linux System”
No – now it’s NOT headless anymore.
I recently bought a Raspberry Pi 3, and I want to make it into a portable computer at minimal cost. My solution has been to use my phone as a terminal display, and I have a separate fold up keyboard. Everything talks Bluetooth, and the rPi 3 is configured so that the Bluetooth communications go to a virtual serial port of sorts. From the phone I use BlueTerm.
Please be kind and respectful to help make the comments section excellent. (Comment Policy)