Cool, Fun, and Mostly Useless Things to do with Linux

I frequently find myself on a weekend without much to do, wishing I could have some cool new project to put on my Linux server at home. I’ve implemented several of my ideas and occasionally come up with one more, but when I’m starving for one and don’t have one on the cooker at the moment, finding a cool Linux project idea on the internet can be quite the task so much so that you can make searching for one a weekend project in itself…​until of course you get so frustrated with not finding one that you want to commit some uncivilized acts to various (hopefully) inanimate objects near you.

If that describes you, hopefully this post will help.

Linux General

Not all of these projects require a "Linux server" or a "Linux desktop". Most of these are quite doable with either category.

  • Synchronize your Android phone with your Linux, Windows, Mac, or Unix systems using Syncthing, the peer to peer, distributed, self-hosted synchronization client/server.

  • Write a script in your language of choice that uses rsync and ssh as the transfer protocol/client, to backup each of your linux or unix boxes (rsync is available for both).

Linux as a Server

This category we can safely say requires a server with a static ip address (or at least dynamic dns), and will be running most of the time, hence the server category. These would be good on an internal network where you control the gateway and/or dhcp, or on an external internet with a vps or business-class internet (most ISPs don’t give out static IPs unless they are explicitely requested).

  • Build an IRC server using UnrealIRCd for the server, and Anope for the user services.

  • Build an XMPP/jabber server for chatting with your GMail friends (or whoever else uses xmpp) using ejabberd or Jabberd2 (this is the one I use)

  • Build a Ventrilo server using Ventrilo (duh). Useful for gamers who want actual "chat room" functionality where you can talk, and the room can hear you. Not super useful though as a voip application.

  • Take webcam photos from command line using the fswebcam package

  • Set up a motion-detecting webcam using the motion package

  • Build a media server that works with your PlayStation 3 using MediaTomb

  • Set up an IRC bot to connect to previously made IRC server using eggdrop

  • Build a DLNA media streaming server using miniDLNA (recently renamed ReadyMedia) and use it to stream your music, video, and pictures to your Playstation 3, Windows computer, Android phone, or whatever you want that supports UPnP.

  • Build a mail server using Exim

  • Build a SIP server with OpenSips. Bonus points for c2s and s2s SSL encryption.

Linux as a Desktop

  • Download all of your email locally using offlineimap and set up command line mail using mutt.

  • Encrypt some or all of your home directory using eCryptfs and symlinks.

  • Learn a new window manager, preferably something complicated and fun like i3 (it’s a tiling window manager that’s designed for keyboards).

  • Learn to use tmux (terminal multiplexer) like a pro (attach, detach, new panes, new windows, split windows, etc).

  • Get a usb stick or external hard drive and install Linux on it, bootloader and all. USB 2.0 transfers at roughly 35 MB per second and USB 3.0 transfers at roughly 400 MB per second, so you won’t see too bad of performance.

    • I’d like to take a second to expound on this one because it’s been particularly useful to me. Having this kind of a setup allows me to use any computer hardware that supports booting from USB as my computer. It’s great for fixing friend’s computers, it’s great in case your laptop battery dies, it’s more portable than a laptop (assuming you’ll have a computer you can use whever you’re going), you can run Linux at work without angering the desktop team who built your work computer. When you go on trips, you don’t have to bring both your personal laptop and your work laptop. You just need one computer and your little hard drive. It’s really a handy thing to have.

  • If your work uses Cisco VPN, you can go in using vpnc (Gnome and KDE GUI implementations are readily available).

    • Disclaimer: I am not responsible for any repercussions of doing this. Think before doing this one. Some companies have policies against computers they didn’t build being on their networks.

  • Write Ansible scripts to build any number of these projects. Another good option is to write ansible scripts to build out any of your Linux laptops (sotware manifests, adding users with consistend uids/gids, sudoers configs, etc). I’m not trying to start a flame war. Ansible is just the easiest to get set up without needing a server already running (okay fine, there’s always puppet apply and chef solo).

  • Learn to install Arch Linux. That may sound trivial, but if you haven’t been doing Linux for long, or are familiar with the standard desktop distro installation process, this can be very a very informative project. Suffice to say, afterwards you will understand much more about how your computer and Linux operate. The beginners' guide can be found here.

Hopefully that’s enough to get you started. Enjoy!

Last edited: June 1, 2015