Telnet/SSH Commands to Raspberry Pi(s)
Posted: Fri Feb 15, 2013 1:05 am
I'm working on yet another version of that Scottish play (again), and I'm trying to be clever...possibly too clever for my own good. The scenic designer has implemented a set with 3 big-screen LCDs strewn about, and the director is having graphic slides created for them. They hope to have the slides change on cue, and many of those changes will need to be synchronized with sound effects. Of course, the “systems integration” has been left to me. Here's the scoop so far:
My first thought was to build my show as I normally would, then stuff 3 extra video cards into a tower in addition to the local GPU to discretely address each individual screen. This has three major drawbacks:
- Cable length from the back of the house (where the audio computer would reside) to the stage is greater than 125', and 1920x1080 slides @ 60Hz wouldn't make it down an extra-long analog VGA cable without breakup, and long DVI cables (or CAT-5 extenders) would be cost prohibitive.
- Handling a heavy audio processing load plus 3 screens of video information is a LOT of number-crunching for one processor.
- A system failure would take down the entire show; both video and audio. Lame.
So, I started looking into other options. I've been playing with a bunch of Arduino programming, and I've been lurking in the forums quite a bit to see what I could use to accomplish this task. You may be familiar with the Debian Linux based Raspberry Pi: I thought it would be perfect for this application. It's simple, can be used as a black-box media server, and has an HDMI output. They seemed so cool that I bought 3 kits from Adafruit to play with. My thought was to strap one to the back of each screen with an inexpensive short HDMI cable and page though a Powerpoint-style slideshow with a custom button controller that I would wire up to the GPIO port(s). The slide data would be stored locally on each separate Raspberry Pi, so any system failure would just take down one screen.
Until I started thinking: What happens in rehearsal when the director wants to start at Act II-Scene 2? How will I know what slide I'm on? Do I have to count back XX slides and press the button that many times? Do I guess? Do I allow the menu on the screen for rehearsals? And I still can't guarantee synchronization with audio cues, since it'll be two separate button presses on different devices by different operators.
So you can see that isn't ideal; so I kept looking.
SCS can issue serial (RS232) and Telnet command strings. I came across a few Raspbian-tuned programs that may or may not do what I need...specifically RaspBMC (a Raspberry Pi-specific port of XBMC Media Server), Pi Presents (although I've spoken with its developer, and he thinks I may want to seek something else), many other command-line image viewers, and what I believe to be the most promising candidate: FIM. It's a simple image viewer that can load images straight to the framebuffer, and it can be controlled via command line. The only problem that I see (right now) is that it'll just load the file (assuming 1920x1080 JPEGs) straight to the screen and I won't have any control of a fade in or fade out. It'll just cut to a black slide.
Here's my current thinking:
- Network all 4 computers with Static IP addresses (Audio, Screen1, Screen2 & Screen3)
- Address each one individually via Telnet/SSH from within SCS. This way, the slides would be accessed via filenames that would recall correctly no matter where I start the show in the cuelist.
...and a long shot:
- Maybe (just maybe...) find a way to get some kind of transition in between slides.
I'm able to SSH into the Raspberry Pi(s) via PuTTY and issue the FIM commands, but I can't seem to mirror the same command from within SCS. I'm just about at the end of my computer savvy, especially when it comes to Linux and Telnet. I have no problem RTFM and learning really fast, but I need some help, and you guys may know (or have access to those that know) how to do this or have better, simpler ideas. I am open to other ideas, but the more tightly integrated with the audio software, the better. If I had to pull the trigger on it today, I'd be crossing my fingers and wiring up some buttons for the GPIO, but I think there's a slicker, more elegant answer, and I have a week or two to figure it out. Sadly, my programming skills/knowledge aren't up to snuff to come up with something fast, so I turn to you guys to help me figure out how to put the pieces together.
Thanks in advance for your consideration - thoughts?
My first thought was to build my show as I normally would, then stuff 3 extra video cards into a tower in addition to the local GPU to discretely address each individual screen. This has three major drawbacks:
- Cable length from the back of the house (where the audio computer would reside) to the stage is greater than 125', and 1920x1080 slides @ 60Hz wouldn't make it down an extra-long analog VGA cable without breakup, and long DVI cables (or CAT-5 extenders) would be cost prohibitive.
- Handling a heavy audio processing load plus 3 screens of video information is a LOT of number-crunching for one processor.
- A system failure would take down the entire show; both video and audio. Lame.
So, I started looking into other options. I've been playing with a bunch of Arduino programming, and I've been lurking in the forums quite a bit to see what I could use to accomplish this task. You may be familiar with the Debian Linux based Raspberry Pi: I thought it would be perfect for this application. It's simple, can be used as a black-box media server, and has an HDMI output. They seemed so cool that I bought 3 kits from Adafruit to play with. My thought was to strap one to the back of each screen with an inexpensive short HDMI cable and page though a Powerpoint-style slideshow with a custom button controller that I would wire up to the GPIO port(s). The slide data would be stored locally on each separate Raspberry Pi, so any system failure would just take down one screen.
Until I started thinking: What happens in rehearsal when the director wants to start at Act II-Scene 2? How will I know what slide I'm on? Do I have to count back XX slides and press the button that many times? Do I guess? Do I allow the menu on the screen for rehearsals? And I still can't guarantee synchronization with audio cues, since it'll be two separate button presses on different devices by different operators.
So you can see that isn't ideal; so I kept looking.
SCS can issue serial (RS232) and Telnet command strings. I came across a few Raspbian-tuned programs that may or may not do what I need...specifically RaspBMC (a Raspberry Pi-specific port of XBMC Media Server), Pi Presents (although I've spoken with its developer, and he thinks I may want to seek something else), many other command-line image viewers, and what I believe to be the most promising candidate: FIM. It's a simple image viewer that can load images straight to the framebuffer, and it can be controlled via command line. The only problem that I see (right now) is that it'll just load the file (assuming 1920x1080 JPEGs) straight to the screen and I won't have any control of a fade in or fade out. It'll just cut to a black slide.
Here's my current thinking:
- Network all 4 computers with Static IP addresses (Audio, Screen1, Screen2 & Screen3)
- Address each one individually via Telnet/SSH from within SCS. This way, the slides would be accessed via filenames that would recall correctly no matter where I start the show in the cuelist.
...and a long shot:
- Maybe (just maybe...) find a way to get some kind of transition in between slides.
I'm able to SSH into the Raspberry Pi(s) via PuTTY and issue the FIM commands, but I can't seem to mirror the same command from within SCS. I'm just about at the end of my computer savvy, especially when it comes to Linux and Telnet. I have no problem RTFM and learning really fast, but I need some help, and you guys may know (or have access to those that know) how to do this or have better, simpler ideas. I am open to other ideas, but the more tightly integrated with the audio software, the better. If I had to pull the trigger on it today, I'd be crossing my fingers and wiring up some buttons for the GPIO, but I think there's a slicker, more elegant answer, and I have a week or two to figure it out. Sadly, my programming skills/knowledge aren't up to snuff to come up with something fast, so I turn to you guys to help me figure out how to put the pieces together.
Thanks in advance for your consideration - thoughts?