Internet

RDPLauncher

TL;DR: Here's the Link:
RDPLauncher

I use RDP pretty heavily, I have several hundred RDP shortcut files which act as launchers for xfreerdp. I had this all scripted but there were some password handling deficiencies, so I wanted to address that. Basically the goal here is to rapidly launch a few dozen RDP connections and only have to input a password once, yet handle password management as securely as I know how.

To that end, I use a GPG encrypted file which contains my KeePassXC passphrase. Then I query KeePassXC for the various passwords I need, and with those credentials I can launch the session using XFreeRDP.

Basically this allows me to use gpg-agent to "hold the door open" for a bit while I open several RDP sessions at once. That gpg-agent TTL is 600 seconds by default, so I can authenticate once and launch lots of RDP sessions for a big efficiency increase.

As I thought further about it, I made sure it was cross platform so I could use it from my Linux PC and my Mac, it should work on a PC with Cygwin just as well, but I don't care to test that. I also added features to make the tool launch my RDP session through an SSH tunnel, as well as select fullscreen. There's also the ability to interactively launch a session from the command line by running rdplauncher with no arguments, which will prompt for user/host/domain/password, or to build a permanent launcher by launching with the -b flag.

The main arguments to rdplauncher.sh are:

-h host
-d domain
-u user
-t to use a tunnel. Calling with just -t will use my default tunnel host, or it can be specified such as with -t hostname

The script uses defaults based on the reality of how I call the tool. For instance if I specify a host and domain but not a user, it will auto-fill that to a default user. I have a few hundred legacy launchers that don't specify user, and I don't want to blanket sed -i the whole directory for that because reasons.

For tunneling, I am taking an arbitrary range of 200 ports and incrementing them based on what's currently listening. If there's already a process listening on port 6201, then try 6202 etc until there's an open one. So I can easily open 20-30 ssh tunneled sessions each with its own ssh process which will close down when the RDP window closes. 200 is "probably overkill", which means it might just be barely enough in the real world.

The launcher shortcut mechanics are a bit different on my Linux and Mac machines so I split the -b script builder piece out based on OS. On Linux, I use KDE/Plasma, and so I generate these as KDE desktop files which look like this:

#!/usr/bin/env xdg-open
[Desktop Entry]
Comment[en_US]=
Comment=
Exec=/home/xrayspx/bin/rdplauncher.sh -h it-host.xrayspx.com -d xdomainx -u xrayspx
GenericName[en_US]=
GenericName=host.xrayspx.com
Icon=remmina
MimeType=
Name[en_US]=
Name=host.xrayspx.com
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=host.xrayspx.com
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

On the Mac side, I use shell scripts with the extension .rdp (which conflicts with Microsoft's client, but I don't care since I never use their client anymore). Those just launch using Terminal, so it does pop a terminal for a fraction of a second, but I really don't have a problem with that.

The launcher for that looks like:

#! /bin/bash
rdplauncher.sh -h host.xrayspx.com -d xdomainx -u xrayspx &

I think the mechanics on Windows would be a lot closer to the Linux way. OSX doesn't have a really good option for this. If I call it with AppleScript instead of a bash script as above, none of the password retrieval process works. I think it short circuits and sends the output back to the AppleScript rather than the bash script which ran the command. If I can get that working that would be ideal.

xrayspx's picture

TV History Time

Music: 

Mojo Nixon & Jello Biafra - Nostalgia For an Age That Never Existed

So this is super interesting. You know, interesting to me anyway.

I'm compiling another week of vintage TV shows, this time from 1963. It's remarkable how easy it is to get the exact episode of many of these even compared to getting episodes from 1980's shows. I'm making a playlist for each night and mixing in 1963 commercials throughout, should be fun. But first, see if you can spot why this week's playlist may present a particular challenge:

As I started out on Sunday night (TVue is boldly not adhering to the TVGuide dictate that Saturday is the first day of the week), I found that while I could find the episode of whatever show I was looking for, the air date listed in IMDB was for like, several months in the future, in some cases as far as March 1964. What the balls IMDB. So it made it kind of tricky to pin down given episodes.

After the 3rd or so show with this happening, I kind of noticed a pattern. Sunday, November 24, 1963 just doesn't seem to exist. IMDB consistently showed "Nov. 17" and then the next episode aired was 'Dec. 1".

So seriously what the he... Oh. Right. Yikes.

My TVue, from the Boston Advertiser, is listing the TV schedule for the week after the Kennedy assassination. I am building playlists to recreate a week of TV which ... ... never existed.

For the record, this being the 24th, we chose Mister Ed, My Favorite Martian and The Judy Garland Show. I got all the right episodes on those, but I'd have liked to have seen the Ed Sullivan Show, but since that's live I imagine it was just canceled altogether. It was supposed to have a Stiller and Meara sketch, so I just picked one of those sketches from another Ed Sullivan. Growing up with Seinfeld it's just so easy to see "SERENITY NOW!", or "I've got a lot of problems with you people!". Genius.

As in my previous week of vintage TV, if I can't find a thing, I'll go for the nearest I can get. So for instance What's My Line on Sunday, Nov. 24 Instead I opted for the December 1 episode with Colonel Sanders. I don't know what was scheduled for that episode, or indeed if it was ever actually shot.

In addition to the JFK assassination horror, one thing that bums me out about this week is that I don't seem to be able to find any episodes of Grindl with Imogene Coca. I really want to see Aunt Edna, but young ('er, she was still in her '50s).

So here's to building a playlist for a TV Guide week that never happened. Obviously this is going to be oddly similar to 9/11/2001, and ... that's about it really. I can't really think of any other week where the machine of commerce would have simply ground to a halt entirely.

xrayspx's picture

Lots of RDP

Music: 

Annie Lennox - Why?

Do you do lots of RDP? Like lots and lots? I do, and even with password management it's annoying. I tend to use generated passwords for all my normal user, Domain Admin user and obviously Administrator accounts. That means lots of workarounds to deal with those passwords while doing bulk RDP sessions.

A typical use case for me is to RDP to 20 machines at a time, run a thing, wait, and log out. I've always scripted this, but not always in strictly the safest way. Plaintext passwords stored in a script, or read off disk. The philosophy is "if someone can read this script, I've already lost the game anyway", but still it's ugly and sick, and so I fixed it. In my defense, the Red Team never did pop my laptop...

I already use gpg-agent to facilitate unpacking of log files. On my syslog servers I roll logs over hourly, gzip them and then gpg encrypt them to my key. Then I can download a bunch of them, run my logunpack script, enter my passphrase once and since gpg-agent caches that credential for a period of time, decrypt all my files in one go.

What I wanted here was basically a way to have keepassxc.cli "hold the door open" and cache the passphrase like gpg-agent does. So what I've done is to use gpg-agent itself for that purpose. I have a GPG encrypted file containing my KeePass-XC passphrase, and I open it using gpg-agent, so it can be reused until gpg-cache-ttl expires.

I've also always had slightly different copies of this script for use cases of "Fullscreen on my laptop" and "fullscreen on larger displays", so I have a switch here for "resolution" as well. "fs" for fullscreen or "fsbm" for "big monitors". Since I'll never go to my office again, that's pretty much never going to get used. The default for the $res value will remain 1280x960. Reasonable enough.

I also added prompts so that it'll ask for host, domain, user and password if you run the script with no prompts from a shell. So /that/ will be super useful to me when I have to do a one-off connection to some remote host but don't need a whole launcher for it. While I'm at it, I put in the -b switch so that you can have it generate a launcher based on that input. That saves me hand editing a template when I add a new RDP host.

I use Linux, but this should work with minimal-if-any changes on Mac and Windows/Cygwin, both of which can run xfreerdp and gpg-agent. I have a good automated ssh-tunneled RDP setup for my Mac, so I might try using that with this so I can use a 4k display for those "busy RDP days".

Being that I do run Linux, here's how I launch this. KDE desktop files like this:


xrayspx@dummyhost:~/rdps$ cat windowsmachine
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment[en_US]=
Comment=
Exec=/home/xrayspx/bin/rdplauncher.sh -h windowsmachine -d domain -u xrayspx
GenericName[en_US]=
GenericName=windowsmachine
Icon=remmina
MimeType=
Name[en_US]=
Name=windowsmachine
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=windowsmachine
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

So anyway, here's the thing - Oh good, the code tag doesn't work anymore and so all my whitespace is gone. Ah well fuck it I'll fix it with &nbsp like a fucking old man:

--------------------------------------------

#! /bin/bash

while getopts ":h:d:u:p:r:t:b" options
do
    case "${options}" in
    b) build="1" ;;
    h) host=${OPTARG};;
    d) domain=${OPTARG};;
    u) user=${OPTARG};;
    p) pval="$OPTARG";;
    r) rval="$OPTARG";;
  t) tunnel="1"; tval="$OPTARG";;
    ?) printf "Usage %s: [-b build new launcher] [-h hostname] [-d domain] [-u user] [-p password id (id of password in gpg file)] [-r resolution (fs, fs-bigmon)] [-t 10.6.5.4 to ssh tunnel through host 10.6.5.4]args\n" $0
       exit 2;;
    esac
done

#Lowercase usernames for later matching, set width x height which I may make variable someday.
user=$(echo $user | tr '[:upper:]' '[:lower:]')
width="1280"
height="960"
os=$(uname -a | awk '{print $1}');

#Set tunneling to default for this client
tunnel="1"

#Set default tunnelling host for this client
tval="xrayspx-zbook"

#Call with no switches or use as a command-line client for one-off RDP sessions
#Or use with -b to build a new RDP launcher shortcut
if [ -z $host ]
  then
  read -p "Hostname:" host
  read -p "Username:" user
  read -s -p "Password:" pass
  echo ""
  read -p "Domain:" domain
  if [ "$build" = "1" ]
    then
  if [ "$os" = "Darwin" ]
   then
    if [ "$tunnel" = "1" ]
     then
     rdp="rdplauncher.sh -h $host -u $user -d $domain -t $tval &"
     else rdp="rdplauncher.sh -h $host -u $user -d $domain &"
    fi
   echo "%! /bin/bash" >> ./host.rdp
   echo "$rdp" >> ./host.rdp
  elif [ "$os" = "Linux" ]
   then
   cp ~/rdps/rdp.template ~/rdps/$host
   if [ "$tunnel" = "1" ]
        then
        rdp="rdplauncher.sh -h $host -u $user -d $domain -t $tval"
        else rdp="rdplauncher.sh -h $host -u $user -d $domain"
   sed -i "s/rdp.template/$rdp/" ~/rdps/$host
      sed -i "s/host.template/$host/g" ~/rdps/$host
   fi
  fi
  fi
fi

if [ -z "$pass" ]
  then

  kpass=$(GPG_AGENT_INFO="" gpg -q -d ~/bin/kp.gpg)
  if [ $domain = "domain1" ]
    then

    if [ -z "$user" ]
      then
      user="xrayspx"
      kpentry="domain1user"
    fi
    if [ "$user" = "xrayspx" ]
      then
      kpentry="domain1user"
    fi
    if [ "$user" = "administrator" ]
      then
      kpentry="domain1admin"
    fi
  fi

  if [ $domain = "domain2" ]
    then
      if [ -z "$user" ]
        then
        user="xray-domainadmin"
        kpentry="domain2domainadmin"
      fi
      if [ "$user" = "xray-domainadmin" ]
        then
        kpentry="domain2domainadmin"
      fi
      if [ "$user" = "administrator" ]
        then
        kpentry="domain2admin"
      fi
      if [ "$user" = "xrayspx" ]
        then
        kpentry="work"
      fi
  fi

  if [ $domain = "local" ]
    then
      if [ "$user" = "administrator" ]
        then
        kpentry="domain1localadmin"
      fi
  fi
 pass=$(echo "$kpass" | keepassxc.cli  show -s ~/Nextcloud/kees/keep.kdbx $kpentry | grep "Password:" | awk -F "Password: " '{print $2}')
fi

if [ "$tunnel" = "1" ]
 then
 for i in {6300..6500}
  do

  proxexist=$(netstat -nat | grep 127.0.0.1.$i | grep LIST | awk '{print $2}')
  if [ -z "$proxexist" ]
   then
   #echo "iteration $i"
   #echo "hostname $host"
   ssh -c aes256-ctr -N -L $i:$host:3389 xrayspx@xrayspx-zbook &
    sshpid=$(jobs -p)
   echo "sshpid $sshpid"

   sleep 3

   if [ "$rval" = "fs" ]
     then
    cmd="xfreerdp +clipboard +compression /cert-ignore /w:1280 /h:960 /bpp:16 /v:127.0.0.1:$i /u:$user /d:$domain /p:$pass /t:$host /f /floatbar"
   else cmd="xfreerdp +clipboard +compression /cert-ignore /w:1280 /h:960 /bpp:16 /v:127.0.0.1:$i /u:$user /d:$domain /p:$pass /t:$host /dynamic-resolution"
   fi
   $($cmd)
   kill $sshpid; echo "killed pid $sshpid"
   exit 0
  fi
 done
else if [ "$rval" = "fs" ]
 then
 cmd="xfreerdp +clipboard +compression /cert-ignore /w:$width /h:$height /bpp:16 /v:$host /u:$user /d:$domain /p:$pass /f /floatbar"
  else cmd="xfreerdp +clipboard +compression /cert-ignore /w:$width /h:$height /bpp:16 /v:$host /u:$user /d:$domain /p:$pass /dynamic-resolution"
 fi
$($cmd)
fi

exit 0

--------------------------------------------

xrayspx's picture

Setting up NoMachine NX over SSH

Music: 

As an Apple and Linux user, remote screen admin can be a colossal pain in the ass. On the Mac, we have a VNC server by default, but can't specify settings which will improve speed over slow connections, like lowering the color depth. I've tried alternate VNC servers in the past, but they all were painful to set up and still very slow over an SSH tunnel.

Several years ago I set up NoMachine's NX server, which is quite nearly as fast as MS RDP, and it's been working like a dream ever since.

This guide focuses on a Mac client connecting to a Mac server over an SSH tunnel.

Install NoMachine NX on both systems from the DMG. If everything is working, there should be a NoMachine menu in the menu bar on the server and some indicator that listening is enabled. Netstat should show the machine is listening on port 4000:

xrayspxs-iMac:~ xrayspx$ netstat -nat | grep 4000
tcp6 0 0 *.4000 *.* LISTEN
tcp4 0 0 *.4000 *.* LISTEN

With the server listening, on the client machine, set up a new connection. Most of this is totally default except that I un-checked "use UDP for multimedia" and set the target port to 4003:

To connect everything up over ssh, set up the tunnel by ssh'ing to your intermediate server. In my case I have the tunnel listen on port 4003, as shown in the new configuration setup, this is to prevent it overlapping with the NX server on the client machine:

ssh -N -L 4003:10.250.0.98:4000 xrayspx@raspberrypi

Verify the client-side machine is now listening on port 4003:

pro:~ xrayspx$ netstat -nat | grep 4003
tcp4 0 0 127.0.0.1.4003 *.* LISTEN
tcp6 0 0 ::1.4003 *.* LISTEN

Then launch the client connection to that local listening port. This can be done via the NX menu in the menu bar, but I automate all this so that I am just clicking on "NX to Home", and a script wakes up the home machine, builds the tunnel, and opens the connection:

On the Mac, you have to run nxplayer from the NoMachine.app package, on both Ubuntu and Mac, the session ".nxs" files are in ~/Documents/NoMachine:

/Applications/NoMachine.app/Contents/MacOS/nxplayer --session ~/Documents/NoMachine/Connection\ to\ iMac.nxs

The full script I run is more like this:

#! /bin/bash

#ssh into the ssh server and wake up the target system with WoL then hang out 10 seconds for the machine to absolutely be awake
ssh xrayspx@raspberrypi 'wakeimac'

sleep 10

#set up the ssh tunnel with listening port 4003
ssh -N -L 4003:10.250.0.98:4000 xrayspx@raspberrypi &

# I am tracking all the PIDs so I can kill them later, this tended to leave tunnels listening and crap after a session so they need to be killed
sshpid=`jobs -p`
shellpid="$$"

/Applications/NoMachine.app/Contents/MacOS/nxplayer --session ~/Documents/NoMachine/Connection\ to\ iMac.nxs

# On the Mac I can't actually kill the pids, since the nxplayer forks off and the script keeps running. On my Linux client, the nxplayer job holds the script from completing until I quit it. I'm sure there's a better easier way on the Mac.
#kill $sshpid; echo "killed pid $sshpid"
#kill $shellpid

xrayspx's picture

Running the Lattice of Convenience

Music: 

New Order - 5 8 6

Since posting about the week of 1983 TV Guide viewing, I've had questions from some people wondering about the storage and other hardware and software we use for our media library. It's really not very complicated to do, though I do have preferences and recommendations.

So here's what we've got.

Motivation:

Mainly I don't like the level of control streaming companies have. That they monitor everything we do, and that stuff comes and goes from services like Netflix and Amazon Prime on their timeline, not mine. I don't like the concept of paying for things like Spotify so that I can rent access to music I already own.

I realized like 15 years ago that while we often spent $200/$300 per week on CDs earlier in our marriage, Natalie and I were drifting away from actually listening to it much, because who wants to dig around for a CD to hear one song, then move to another CD. Ultimately, the same applies to movies, we have lots of DVDs, and I don't want to have to dig through booklets just to watch a couple of James Bond movies.

It's super easy to maintain, and we like being able to watch Saturday morning cartoons, "Nick-at-Nite" or throw on music videos while we play arcade games and eat pizza. Once up and running, it's all pretty much push-button access to all the media we like.

Media:

- 2000-2500 CDs (Maybe 200GB of music)

- Couple hundred movies, really probably not as many as most people.

- Lots of TV shows. Space-wise, this is where it adds up fast when you're ripping a box-set of 10 seasons of some show.

- Commercials, mainly from the '80s and '90s, but I'll grab anything fun that strikes us.

- Music videos. We have an overall collection of around 2000, and a subgroup of about 700 which represent "'80s arcade or pizza place" music. That's music that was just ubiquitous when we were growing up in the '80s and early '90s, and you heard it all the time whether you liked it or not. I've since come to appreciate these songs and bands in a way I didn't when I was a dickhead punk kid.

So all told, there's about a 5TB library of stuff, mainly TV shows, but also a decent music library that needs to get maintained and served.

Hardware:

- Ripping machines - Mainly, all I need is the maximum number of DVD trays I can get my hands on. There's nothing special here. My tools work on Mac or Linux so I can work wherever. We have one main Mac Pro that has 2x 8TB drives mirrored which hold the master copy of the media collection.

- NAS - Seagate GoFlex Home from like 10 years ago. I think I originally bought this with a 1TB drive, and have since upgraded it twice, which is kind of a massive pain. Now it's got an 8TB drive which has a copy of the media library from our main machine. I'll get into the pros and cons of this thing below.

- Raspberry Pi - I have a multi-use RaspberryPi which does various tasks to make things convenient and optimizing TV viewing. There are a handful of scripts which create random playlists every night for various categories of music videos, TV shows (Sitcoms, 'BritBox', 'Nick-at-Nite'), etc. It also runs mt-daapd, which I'll get into below.

- Amazon Fire Sticks - We have a couple of them. I'm not super impressed with their 8GB storage limit, but I'm definitely happy enough for the money they cost. They're cheap, around $20 now, and they do what they say on the box. Play video. I have side-loaded Kodi 17.x, but they seem not to quite have the resources for 18.x, though I'm really not sure why not. It's just slower.

- The Shitphone Army - I've got obsolete phones (Samsung Galaxy S4-ish) around the house and decent speakers set up so we can have music playing while doing the dishes for example.

Software:

- Kodi - I mentioned Kodi, which is just an excellent Free Software media library manager. Kodi gets /such/ a bad rap because of all the malware infected pirate boxes for sale, but you never see much from people who actually use it to manage a locally stored library of media they own. Can't recommend it enough. Get familiar with customizing menus in Kodi and making home-screen buttons linking directly to playlists. It's worth it and makes it look nice and easy to use.

- mt-daapd - I'm running out of patience with music streaming, though everything does work right now. MT-Daapd just basically serves up a library of music using the DAAP protocol, which used to be used by iTunes

- DAAP (Android app) - This could be great, but it seems to be completely un-maintained, and somewhat recently moved from being open source to closed, so unless I have an off-line copy of the source, there go my dreams of updating it. But it works well on the Shitphone Army and on the road so we can basically stream from anywhere. Other DAAP players for Android are pretty much all paid applications, and none of them seem to work better particularly than DAAP.

- Scripts A handful of poorly written scripts for ripping DVDs and maintenance of the library (below)

Recommendations:

Players - While the Fire Sticks work great, they're really very dependent on having constant access to Amazon. Were I installing mainly a Kodi machine, it would be much better to use a Raspberry Pi either with a direct-connected drive or mounting a network share. It's super easy to set up with ready-to-go disk images which boot straight into Kodi.

Playlists - Create lots of playlists. Playlists and randomizing things are two things that Kodi is terrible at, so I don't try to make it do it. These scripts run nightly on the Raspberry Pi and make .M3Us for us.

Filenames - Have a good naming convention. All my playlists are M3Us of just lists of files. That means that you don't get Kodi's metadata database with the pretty titles and descriptions, and so the files must be named descriptively enough that you can tell what episode you're looking at from the list of filenames. My template is "Name of the Show - S02E25 - Title of the Episode". Kodi's scrapers work well with that format and it makes it easy enough to fire up the Nick-at-Nite playlist and decide where to jump in.

At various times, I've considered parsing a copy of the Kodi database to suck out the metadata and add it in before the file location. In an M3U, that looks like this:

#EXTINF:185,Ian Dury & The Blockheads - There Ain't Half Been Some Clever Bastards
/mnt/eSata/filestore/CDs/Ian Dury & The Blockheads/Ian Dury And The Blockheads The Best Of Sex & Drugs & Rock & Roll/17 There Ain't Half Been Some Clever Bastards.mp3

It seems like having all that sqlite stuff happening would add a lot of overhead to generating playlists, and having well-named files saves me from having to worry about it, so I haven't bothered.

Storage - Though I use a "Home NAS" product that overall I've been pretty happy with, it does irritate me. Consumer market stuff is /so/ proprietary that it's quite hard to just get to the Linux system beneath and customize it the way you see fit. Specifically in the case of the GoFlex, "rooting" it even involved replacing Seagate's customized version of SSH with a vanilla one. Screw that up and you brick the device. I also run into network bottleneck issues with that thing. While you can enable jumbo frames, for instance, when syncing new content the CPU gets pegged, I believe I'm running out of network or disk buffer, which is kind of unacceptable in a NAS device.

Building it today, I'd just use a Raspberry Pi 3 with a USB drive enclosure. For the time being, my growth curve is still (barely) pacing along with the largest "reasonably priced" drives on the market. My ceiling is about $200 per drive when I do upgrades, because I am a very cheap man.

I have no opinion on consumer RAID arrays. I can only imagine consumer RAID based NASs come with all the shit I hate about the GoFlex. Yes, I'm biased against consumer grade garbage tech and that's probably not going to change. I'll have to buy one someday I'm sure, but for now it's all being kept simple.

Backups Keep backups. While I have multiple copies of everything, it does make me somewhat nervous that the only part of the media library currently being backed up off-site is the MP3 collection. That's got to change, and rsync is your friend. Ultimately I'll probably end up upgrading my home Internet from 20Mb/2Mb to something which will allow me to sync over a VPN tunnel to somewhere off-site (friend's house, work...).

Sample Scripts:

Here are some samples of the shitty bash scripts that run this whole nonsense. I know the better ways to write these, but the fastest possible way to hammer these out worked well enough and there's no way I'm going to bother going back and fixing them to be honest.

Rip CDs

I use an application called MAX on the Mac to rip CDs. I think its usefulness might be coming to an end, and I'm not sure what to do about that. It uses (used?) MusicBrainz database to automatically fingerprint and tag discs, but the last CD I ripped it seemed to have problems. You can run iTunes side by side with Max and drag the metadata over from there, so maybe that works well enough?

Anyway, I use that because I rip to both 320k CBR MP3 and FLAC. I have a shitload of stuff that really should be re-ripped since they're 128k and no FLAC, but I've so far been unmotivated to do so.

I wrote a bunch of stuff to move all the output files around and update iTunes libraries. Honestly I don't rip a whole lot of new music, which is a shame and which I should really fix.

Rip DVDs

DVD ripping is a lot more fragile than it should be. Good software like Handbrake are bullied into removing the ability to rip protected DVDs, and things are being pushed toward the commercial. I use mencoder in the script below.

DVD titles are sketchy at best, and as far as I know, you can't really fingerprint a DVD and scrape titles in the way you can with CDs. So I do what I can. I take whatever title the DVD presents and make an output directory based on that name plus a timestamp. That way if you're doing a whole box set and all the DVD titles are the same they're at least writing out to separate directories and not overwriting each other.

As far as file-naming, unfortuantely we don't live in the future yet and that's all down to manually renaming each output file. I use the information from TVDB, not IMDB, since that's the default library used by Kodi's scrapers. Sometimes the order of things is different between that and IMDB (production order vs airing order vs DVD order issues plague this whole enterprise).

#! /bin/bash

timestamp=`date +%m%d%Y%H%M`
pid="$$"
caffeinate -w $pid

id=$(drutil status |grep -m1 -o '/dev/disk[0-9]*')
if [ -z "$id" ]; then
echo "No Media Inserted"
else
name=`df | grep "$id" |grep -o /Volumes.* | awk -F "Volumes\/" '{print $2}' | sed 's/ /_/g'`

fi
name=`df | grep "$id" |grep -o /Volumes.* | awk -F "Volumes\/" '{print $2}' | sed 's/ /_/g'`
echo $name
dir="$name-$timestamp"
mkdir /Volumes/Filestore/dvdrip-output/$dir

echo $dir

for title in {1..100}
do
/Applications/mencoder dvd://$title -alang en -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate="1200" -vf scale -zoom -xy 640 -oac mp3lame -lameopts br=128 -o /Volumes/Filestore/dvdrip-output/$dir/$title.avi
done
chmod -R 775 /Volumes/Filestore/dvdrip-output/$dir

Playlist Script

The simplest Music Videos one below just looks at one directory of videos and one directory of TV commercials and randomizes all the content into an M3U. The more complicated ones have dozens of directories, and I'm sure I'm doing this array-building the wrong way. I'm sure I could have a text file with the un-escaped directory names I want and read that to build the array, either way, it really doesn't matter because if I want to add a TV series, I still have to edit a file, so this works fine. I've also thought about having a file in each directory like ".tags" that I search for terms in, like "comedy,nickatnite,british" and build the array from that, I dunno, sounds like work.

#! /bin/bash

array=`find ./ -type f;
find ../../Commercials -type f`

printf '%s\n' "${array[@]}" | sort -R | grep -v dvd_extras | grep -v "./$" | grep -v "\.m3u" | grep -v -i ds_store | grep -v ".nzb" | grep -v ".srt" > full-collection-random.m3u

- rsync the TV library. I have several of these, one for TV shows, one for movies, music videos, mp3s etc. It's just somewhat faster to only sync the thing I'm actually adding content to, rather than have to stat the entire library every time I rip a single DVD. The TV show sync tool also deals with the playlists, which are actually created on the NAS drive, so they have to be copied local before syncing or else they'll just get destroyed every day.

This checks to see if the NAS volume is mounted, if not it will mount it and re-run the script.

#! /bin/bash

mounted=`cat /Users/xrayspx/xrayspx-fs01/.touchfile`

if [ "$mounted" == "1" ]
then

cp ~/xrayspx-fs01/Common/TV\ Shows/1\ -\ Playlists/* /Volumes/Filestore/Common/TV\ Shows/1\ -\ Playlists/

rsync --progress -a --delete /Volumes/Filestore/Common/TV\ Shows/ ~/xrayspx-fs01/Common/TV\ Shows/

~/bin/umounter.sh
exit 1
else
mount -t smbfs //192.168.0.2/filestore ~/xrayspx-fs01/
~/bin/synctv
fi

xrayspx's picture

This week in Rad Helicopter News

Music: 

Kenny Loggins - Danger Zone

Witness the power of this fully operational Lattice of Convenience.

As some people know, I've become relatively intense when it comes to hoarding archiving media of all kinds, and recently that means '70s and '80s TV shows, cleaning out all the box sets I can find from Goodwill and antique stores and ripping them. For some time Natalie and I have been toying with the idea of taking a day from a random '80s TV Guide and watching that day in TV shows.

In the last few weeks, we've also started to listen to Ken Reid's excellent TV Guidance Councillor podcast, and have decided there's no time like the present. And in fact, driven by Reid's format, we decided to do a whole week. We pretty much pre-planned the whole week, though in some cases I wasn't able to get the exact episode of a show, so we had to make due with something else from the series. We also decided to stick to the 3 major networks, since that's all either of us knew, living in the sticks and all.

We started with Saturday, January 7, 1984, with TJ Hooker, The Love Boat with Charo, and Fantasy Island with Vic Tayback, Katherine Helmand and Richard Hatch. Natalie decided she likes TJ Hooker, and so we'll hunt down more of those even though I killed the show because I tend to immediately ID "The Guy". Whoops. We just chose a Charo episode of Love Boat because I couldn't get the one from the day, and Charo is delightful at all times. We need more Charo.

On Sunday, we stuck largely with sitcoms, since we've seen things like the Knight Rider episode from that day. So it was Ripley's Believe it or Not, Alice, One Day at a time, and the Jeffersons. Ripley's and Alice were both harder to find than I would have thought. We had to settle for like the second episode of Alice, and just any Ripley's I could find.

Monday was a mix, starting with That's Incredible, then Newhart and Emerald Point N.A.S. Emerald Point /should/ have been an awesome show. Within the first 3 minutes you've got: MacGyver O'Neill. Crashing an F-14. Into a Cuban. How can that fail? By making it a soap opera, that's how.

Tuesday NBC took it all. A-Team, Riptide, Remington Steele. Natalie does like a good crime-fighting buddy-show, so there really wasn't any contest. I couldn't get excited about a late-season Three's Company or Happy Days.

Wednesday got us to hit ABC for The Fall Guy, then back to default NBC for a Very Special Facts of Life, Night Court and St. Elsewhere. As I remember, all Facts of Life were very special.

Thursday night was another NBC sweep. Gimme a Break!, Family Ties, Cheers, Buffalo Bill and Hill Street Blues.

Friday, ABC rounded it out with Benson and Blue Thunder, which we kind of loved. It was our second 'Copter-Based show after Riptide, and had me yelling at the TV most of the time.

We opted for Episode 1 of Blue Thunder, since the schedule had us watching Ep 2, and figured we'd start at the top. A maniac with a pre-Vietnam era light observation aircraft was flying over We-Can't-Call-This-LA shooting down police helicopters and even strafing the funeral of one of the pilots he killed. Obviously the answer to this isn't "send up two fighter jets immediately after the first incident to knock him out", it's "Regular LAPD cops need a stealth helicopter with a goddamn gatling gun mounted on it to fly silently around and light up bad guys". There was some confusion over organizational affiliation, since everything points to these guys being regular cops (right up to the annoyed Captain yelling "CHHHHEeeeneyyyyy!"), except Butkis or Bubba Smith were all "Freeze, Federal Agents". On the other hand, who cares, all I know is Darryl Gates would have given his right eye for one of these things in 1992.

So far, likes and dislikes:

As I mentioned, Natalie loves her some buddy-shows and dumb action and so she definitely wants more TJ Hooker, Hardcastle and McCormick and Remington Steele. Natalie also remembered how much she liked The Jeffersons and Newhart, though she was kind of "meh" on One Day at a Time. For that one, we watched both the "current" episode, and the first episode of the series, since this was the last season, and wasn't really "representative' in my mind. I think I'd get more Alice if we can. For as popular a show as it was, it seems pretty hard to find. Similarly, Benson and Webster, long running show, stupidly hard to get.

On the other hand though, Emerald Point Naval Air Station. Wow. Just. Jeez. I think Richard Dean Anderson had to do MacGyver and Stargate SG-1 just as penance for the existence of this show. I can't say for sure that the debt has been fully repaid.

Ripley's Believe it or Not and That's Incredible are kind of hard to find, and that's a shame, since we live in The Future and so it was fun to go look up the people on those shows for a "Where are they Now" running commentary between us.

This kid had a pretty decent career at one point.

This week of TV really does show how much we just wanted to be entertained in the '80s, versus everything having to be Real and Gritty as it is now. Sure there was Hill Street Blues, but there was also Magnum, Riptide and Hardcastle and McCormick. We weren't weighed down with SVU type bummers every week. I saw an analyst who chalks this up to Vietnam. In the same way that Magnum, coming back from Vietnam didn't want to process it, and chose instead to live as a large child for a little while, so the US chose to amuse ourselves with dumb escapism.

I can't say I disagree with that theory, since I'm basically doing just that right now. I'll take my Cylons toaster-headed and shelve the HD Edward James Olmos version until happier times.

Tags:
xrayspx's picture

Stereo Slide Viewer Hack Proof of Concept

Music: 

Peaches - The Inch

Wherein there's some history, and a major pet project.

xrayspx's picture

Geoguessr World Tour - Albino Reindeer?

Music: 

It's still the holiday week, so here's one I found today, if you want to see it yourself, it's right here. I don't know if white reindeer are a thing, but this one actually does look albino, it's pretty pink:







xrayspx's picture

Geoguessr World Tour - The Blurry Faced Man

Music: 

I'm with you, blurry faced man of Bloomsbury Square:

xrayspx's picture

My Life Is Going To Suck Without Net Neutrality

Music: 

There are so many things I do which are likely to suffer with Net Neutrality's loss.

I run my own mail, web and cloud sharing services on a VPS that I maintain. Owncloud syncs all my devices, I use IMAP and webmail. I also run lots of "consumer" stuff for myself. I own 2500 CDs which I've ripped and share for my own personal use. I have playlists. I can connect with DAAP from my phone, and listen to my own CD collection, music I have paid for, Spotify style. I know people are saying "Spotify will work just fine", but what if I don't want to use Spotify?

This is all encrypted, personal connections. Nothing illegal is happening here. I'm not filesharing or streaming Torrents or any other grey-area services. It's just all my personal stuff, owned and manually copied myself, sharing to myself. No one gets ripped off here.

I can plug my Amazon Fire stick or Raspberry Pi into any TV and use Kodi to stream my own MP3s or movies, etc. I can use it to watch Amazon Prime or Netflix as well. Kodi also has a wealth of plugins to watch content from sources such as the PBS website. We all can watch Nova, or Julia Child, or even Antiques Roadshow over the Internet, for free, legally. This may all suffer when backbone providers and local ISPs can both decide which packets have priority over other traffic. PBS could be QOS'd out of the budgets of millions.

(Note *)I don't own a Nest or any other IOT garbage, but I have toyed with the idea of building my own, running on infrastructure I build. I don't want Google to know what temperature my house is right now. And I don't want some mass hack of 500 Million Nest users or idiot IOT Lightbulbs to let some Romanian turn my furnace off in the middle of February either.

So yeah, losing Net Neutrality could effectively disable all of this. Small hosts like me could be QoS'd off of the Internet entirely, unless we pay extra /at both ends/. Pay my hosting provider to pay their backbone providers to QoS my address at a decent speed. Then pay my consumer ISP to QoS my traffic so I can reach "The Good Internet", like they have do in Portugal.

This is going to cut my lifeline to my own data, hosted by me on my own machines. Am I going to have to pay an additional "Get Decent Internet Access Beyond Google, Spotify, Facebook and Twitter" fee to the Hampton Inn just so we don't get QoS'd away from our own stuff? It's bad enough that the individual hotel can effectively do this already today, but the hotels are at least limited by the fact that they're in competition with each other and if they have ridiculously shitty Internet that you can't check your mail over, well people would notice that. Backbone providers pretty much have no such direct consumer accountability. No one's going to say "well, fuck that I'm not going to route over AT&T anymore", they might say "Hilton has shitty Internet, I'm going to Marriott".

Some of the most demoralizing part of this is that the rule-makers just don't get it. I already know they don't care, but former FCC Chair Michael Powell's statement, which boils down to "You can still use Facebook, (Amazon) Alexa, Google and Instagram, just like you can now" is missing the point either deliberately or purposefully. That most "consumers" will be fine isn't the point. The point is that everyone be equal, and all traffic be routed equally.

* The risk to my information is proportional to the value an attacker places on the information. Could a state actor target my email server and read my mail? Yeah, the Equation Group or Fancy Bear or some Eastern European ID theft ring could probably exploit some flaw in whatever software serves my VPS, or flat out order the ISP to give them access to my stuff, but why? What does the NSA gain by ransacking my mail server? Not much. How about criminal attackers? However they /would/ expose 1.5 Billion Yahoo accounts all at once, and have that entire corpus of mail to search against, plus passwords they could use to try and attack everyone's bank account all at once.

Pages

Subscribe to RSS - Internet