Linux Archive

I love being lazy. In fact, it’s fair to say I take it quite seriously.

One of my favorite teachers taught me something deeply memorable one day. He taught me that being lazy is the best way to approach any job. Not just for you, but for the job itself and everyone else it affects.

Now, on the face of it this might sound like some poor advice.

Follow me along here:

1. The goal of being lazy is to not do more work than you have to.

2. Doing something once is less work than doing it twice.

3. To do something only once, you have to do it right the first time.

So, therefore, if you want to be lazy, you have to do the job right the first time.

– From the unforgettable Chris Venne.

One of the best ways to be lazy is with init scripts. Since I’m a Xubuntu/Debian fanboy, I use both upstart init and (x)init.d style scripts. Now, these can be easy, and sometimes they can be hard, especially when you don’t have useful examples. (and especially more so when half the sites reap off each other and have the same ding dong mistake. More on that later.)

To avoid confusion, when I say upstart script, I mean the newer style scripts run from /etc/init/ by Upstart. When I say init.d or init script, I mean a script run by init from /etc/init.d/. Hopefully this helps avoid confusion. (Though in the future after init is very deprecated, I will likely just call then init scripts.)

Some people reading this likely know what upstart and init/init.d scripts are. If you do not, the short version is, they are scripts run by services (called Upstart and init) that manage other services. This is how you get stuff to start and stop on boot and shutdown.

I keep around some template files, so I never have to worry too much about remembering how to do it.

For init we have: (Remember, you can click on the top blue line to download the file.)

# <name of daemon>### <Longer description>##
description "Derp"
author "Herp Herp D Derp"# The below "start on" line controls when it starts up. There are many options available.
start on (local-filesystems and net-device-up)#Ditto for stop on.
stop on runlevel [016]
respawn
respawn limit 530envuid=<user to run as>envgid=<group to run as>envumask=000
# This next line gets called on start, and killed on stop. Upstart tracks the running invocation automatically.# I use the below exec line, but you can use just about anything.exec start-stop-daemon -S-c$uid:$gid-k$umask-x<path/to/executable/>---d-l<log/me/here.log>-L warning
#exec /usr/bin/binary

And the “run some checks and scripting, before running the daemon/binary” type:

# <name of daemon>### <Longer description>##
description "Derp"
author "Herp Herp D Derp"# The below "start on" line controls when it starts up. There are many options available.
start on (local-filesystems and net-device-up)#Ditto for stop on.
stop on runlevel [016]
respawn
respawn limit 530envuid=<user to run as>envgid=<group to run as>envumask=000
#A more insane start condition. This one is based off starting lightdm
start on ((filesystem
and runlevel [!06]
and started dbus
and (drm-device-added card0 PRIMARY_DEVICE_FOR_DISPLAY=1
or stopped udev-fallback-graphics))
or runlevel PREVLEVEL=S)
stop on runlevel [016]#The below lines are run as a shell script on start, and the started binaries killed on stop.
script
if["$RUNLEVEL" = S -o"$RUNLEVEL" = 1]then# Single-user modeexit0fiexec<some binary>
end script
#This runs after stop
post-stop script
rm/some/tmp/files/
end script

Now, before, I mentioned some common problems with these. Permissions and environmental options are often the place to start. Using start-stop-daemon you have user selection with --chuid and --chgid. This works with both init and Upstart.

Typically, the simplest troubleshooting step is to run each line of the script, or if you suspect your flow control (IF, ELSE, etc), stuff the lines up in a script of their own, with echo output and sleeps to identify and temporally separate steps.

Sometimes, calling an external bash script can be useful as well. The binaries spawned by that script will still be watched by Upstart for the purpose of stopping them. With init, this is more difficult.

One last thing to remember, both init and Upstart scripts are interpreted as sh, or shell, not bash. Look for bashisms in your script, and if you cannot live without them, call an external script, ensuring it is executed by bash. (A bashism is a procedure or command specific to bash, and not found in other shells, such as sh and ksh.)

We have a PS3, an Xbox360, 2 android phones, a tablet, 2 laptops, and a TV. I think I have a PopcornHour and a Western Digital media player.

Like me, you could also have a ton of digital media, and you want to watch or listen to it wherever you are.

What if I want to watch one thing in the kitchen, while Sean watches something else on the TV? There are so many posts on this, on the Internet, and so many of them have lead me down a dead end, that I just hacked (as in with a machete!) a new path.

Right now, I want to talk about playing and transcoding media. In a future post I will talk about acquiring digital media, ripping and downloading legal content.

First of all, you have to decide what you want to use to play your media the most. For me, it was the PS3, but now it’s the Xbox.

Now, managing my media is one of those places I will *definitely* spend a few dollars on good software, but what I describe in here can mostly be accomplished for free. The software I ended up with, after years of using PS3MediaServer (Which is still awesome software if you just want to stream to consoles!) is called Serviio. There are two flavours, free and paid. I chose to buy the additional functionality, but for in-home use only, the free version is just fine.

To be clear, up front, the part I paid for was the ability to transcode and broadcast my music and video to my Android and to browsers *outside* of my home network using a program called MediaBrowser. If you do not pay, and use the free version of Serviio (the software) you can still do all the viewing you want via DLNA/UPNP (That would be your Xbox, PS3, and any DLNA enabled players on your network.)

DLNA/UPNP, of course, allows you to stream media to your consoles. The awesome thing about the MediaBrowser part, is (and this is a true story!) if you find yourself at a houseparty with tepid music, as long as its playing through a computer (and lets face it, that happens often at houseparties!) you can crank up your own playlist of tunes to heat things up.

On the free side, Serviio does thumbnailing of movies, transcodes MKV, AVI, WMV, TS, etc. fast and flawless (though FF/RW on MKV doesn’t always work, natch.) It plays to just about anything, and can keep surround data or downmix to stereo.

In order to get some of the nonDLNA streaming to work (and to improve the DLNA streaming) I recompiled the FFMpeg version they include, to make it my system default. I used their provided FFMpeg 1.1.1 download from this page, and compiled it according to these instructions, substituting my 1.1.1 version for their latest branch. (I did perform the optional lavf portion.)

One bonus to this, is the ability to double-click a .ts file and play it in FFMpeg + VLC, instead of using tsmuxer + VLC.

Run it in windows (or install it with wine or CrossOver in Linux), or the game is installed inside DosBox (a DOS emulator) and boom, instant funtime.

If you want to network a few of these games together, you usually all need a windows machine so the DosBox networking works… When you install the GOG Windows DosBox under wine in Linux however, the networking is being emulated twice, and tends to fail.

Well, I figured out an easy solution, though it can be a bit heavy on disk space if you aren’t already using wine.

4. Locate your appropriate SERVER or CLIENT conf file (for Masters of Orion 2, the config file is dosboxMOO2_server.conf)
Open it up (we want to make a couple changes to help troubleshoot issues. Windows and Linux DosBox are almost, but not quite, the same.)
Change fullscreen=true to fullscreen=false so we can see the warnings scroll up in the terminal.

Do you spend a lot of time in a terminal? I do… easily 80% of my “productive” time (e.g. not watching Stargate) is gazing into xfwm4-terminal.

Lets look at some scenarios: (I assume you want to ssh in more than once a week.)

Let’s imagine I’m away from home, at a buddy’s, and all he has is Windows. Simple right? Download PuTTY! (or bring it on a USB key. There is a portable version) Or wait, is there a better option? Yes, which brings me to my next scenario:

Suppose this Windows machine is at… say, your local electronics store, or you simply cannot download a program for whatever reason?

Well, as long as you have Internet access to your server, you can use ShellInABox! This awesome server side software allows you a mostly functional ANSI/VT100 or Wyse 60 terminal.

The man page is fairly straightforward. You install the product to your webserver, and point a specific port to it, and set it to run as either a background service (I recommend this), or as an on-demand CGI (which uses less resources, but has to spin up. If your box is thrashing, this can take a while.)

Alright, you say… What about on my phone?

Well, if you have an iPhone, I don’t. Sorreh…

As for Android, there is a bevy of awesome software. I currently use ConnectBot and irssi ConnectBot (since I chat on IRC with Irssi, I find it makes sense to have a terminal client that allows me to use the control keys within Irssi without butchering my usual xterm controls.)