Physical VM controller using D1 mini, mechanical switches and a custom enclosure


mikegg

Recommended Posts

Hiya guys!

I wanted to quickly share a project i've been working on and see if there is any interest in me releasing all the files and maybe writing a build guide for others to use.

 

I love unRAID and the flexibility of the VM system. I quickly replaced the need of having two machines at home by just having a unRAID server that i can game on by passing through my graphics card to a VM.

I'm quite lazy though and having to go into the webUI each time i wanted to start a VM quickly became a big enough hazzle so that i had to do something about it.

 

What i came up with is a small controller using a D1 mini together with some switches for mechanical keyboards (i'm quite addicted to mechanical keyboards and even build my own custom boards).

The D1 mini has one button per VM i want to be able to control plus one button for shutting a VM down and one button for destroying a VM.

The D1 mini connects over Wi-Fi and only needs power over USB. It does not have to be connected to the servers USB ports.

 

I designed the case to be glued together kinda like a puzzle and ordered it from a company here in europe that cut it for free with a lasercutter and they raster engrave the OS icon on the mirrored backside so that i can put a activity led behind it that shines through.

 

The VM is started by pressing the button for the VM which then sends a WOL signal to the server where i've installed the "Virtual Machine Wake On Lan".

There is also a companion docker app running written in ruby which exposes a super simple API that the controller use to find the state of all the VMs but also to issue a shutdown or destroy command to libvirt.

 

When the button is pressed the VM is started and the activity led flashes slowly. If you press a button for a started VM the VM is selected and the activity led flashes in a quicker rate and you can then press either the shutdown or destroy button.

 

All in all the whole project is pretty cheap. The D1 mini i just a couple of bucks on aliexpress. The case is not needed but makes it a bit prettier on your desk. I used the service available at http://cotter.co to cut the case in acrylic. At the time i ordered they offered free cutting time and material in silver mirrored acrylic, but they calculate the price live when you upload your design.

IMG_0341.jpg

IMG_0342.jpg

  • Like 3
Link to comment
  • 2 months later...
  • 3 months later...
  • 1 month later...
  • 4 weeks later...
  • 2 years later...

It is probably just a lack of education on my part.  When I go to Add the new Docker container, I don't see anything for lisinge/unraid-vm-manager as an option.  I'm guessing it should show up under Default Templates or User Templates.  Is there an additional template repository that I should be adding in order to have your container show up in the list?

It looks like User Templates are at:  /boot/config/plugins/dockerMan/templates-user
Do I need to manually create a file at /boot/config/plugins/dockerMan/templates-user/my-unraid-vm-manager.xml? If so, what would go in it?

I have tried to look through the forum sections for developing containers to draw the connection between the files you have on github and what is needed to create the new docker container and can't quite seem to make the connection--so any help is appreciated.

Looking forward to having this light up the rest of the way. It has been a fun project.  I 3D printed my switch housing and am happy to share those designs for others too once I get it all working.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.