This Application aims to deliver a Mouse and Keyboard interface for some SBC, Single Board Computers, devices. It was first planned to work with SteamLink, given that it requires external peripherals to interact with and it might be annoying. For example tiping in chat with only a gamepad might be very frustrating. So, in order to prevent the user from being constantly plugging and unplugging mouse and keyboard, this project was created. This way, at any time, the user can simply open the app in the smartphone and connect to the SteamLink. A virtual mouse and keyboard will pop up on the screen and the user can interact easily.
The app was originally planned and developed for Bluetooth, given that it is supported 100% of the time as the user is always close enough to interact via Bluetooth. Wireless is currently being worked on but it was not first planned because some users do not have Wireless support near the SteamLink.
Although it was planned for SteamLink the author also found feasible to port the same app for other SBC's. In this case a tutorial for Raspbian for Raspberry Pi was also created.
In theory, this App works for any Linux Distribution, as long as Bluetooth is supported. But the setup script for each distribution must be created.
The objective of this project is to create a support keyboard, mouse and gamepad to help with steamk link user interaction. The app is to be developed to android in a first initial release and the communication is featured via bluetooth. No need to buy additional mouse, keyboard or second gamepad. No need to always move the peripherals arround. The bluetooth data transfer was chosen because the steam link supports bluetooth. Given that, in some conditions useres might not have wireless connection due to distance reasons. However, bluetooth will always be close to the players becuase a proper close quarters interactions is needed with steam link.
This project works also for other linux based distributions, as long as they support Bluetooth. In the following chapter I will show how to install in SteamLink and Ubuntu.
- SteamLink Device
- MacOs, Linux Machine or Windows with Linux terminal (example: windows 10 with ubuntu from Store)
The SteamLinkSDK repository explains very well how to enable ssh under SteamLink.
Basically: Format a pen drive to FAT32 format, Inside the pen-drive create folder steamlink
, inside create config
, inside again create system
and finally inside create the text file enable_ssh.txt
. Open the file and write SteamLink
, save and close it. Now power cycle the device, this means you need to unplug SteamLink from electricity and plug it again, Shutting down from the SteamLink itself it will only put it to sleep and it will not enable SSH. Do not change the password.
Now, boot up SteamLink and retrieve the IP Address
by going down to Settings->Network. If you don't have an IP Address then it means you are not connected to your Home Network. The IP Adress should have the following format: X.X.X.X
where X
is a number from 1 to 255.
Write down the IP Adress, we will need it for the next Step.
First, Download the Client App from the Play Store, SteamLink Keyboard Mouse Companion, open and notice the underlined number by the format XX:XX:XX:XX:XX:XX
that is your device MAC Address, note it down we are gonna need that later.
Since SteamLink does not provide a proper UI for the users to pair devices, we have to pair via terminal.
Open a SSH connection from termianl ssh root@<STEAMLINK_IP_ADDRESS>
. Don't forget to change <STEAMLINK_IP_ADDRESS> for the real address that you retrieved last step.
Now, follow the Tutorial on the Wiki to pair the device, in the last step you will need the MAC address that you wrote down in the beginning of this step. Bluetooth Pairing With SteamLink
Download the script SteamLink Setup Script
Run the script with your steamlink IP Address. Ex: ./setup-steamlink.sh 192.168.1.105
After the script finishes running, power cycle the SteamLink, unplug from electricity and plug again.
Open android app, press Connect and select the steamlink in the list of paired devices.
- Raspbian Device (Raspberry Pi)
Raspbian provides a easy user interaction in order to pair devices. The first thing you should do is pair Raspbian with your device. If you are unfamiliar just search in Google and tons of tutorials will show up.
Run the Provided script in order to install the daemon server in Raspbian. Raspbian Setup Script
I will assume you are inside Raspbian terminal. So, just run the script sudo ./setup-rapbian.sh
Oncd it finishes, reboot Raspbian.
Download the Client App from the Play Store, SteamLink Keyboard Mouse Companion Open the app, press Connect and select the rasperrypi in the list of paired devices.
- Ubuntu Machine
Ubuntu provides a easy user interaction in order to pair devices. The first thing you should do is pair Ubuntu with your device. If you are unfamiliar just search in Google and tons of tutorials will show up.
Run the Provided script in order to install the daemon server in Raspbian. Ubuntu Setup Script
I will assume you are inside Ubuntu terminal. So, just run the script sudo ./setup-ubuntu.sh
Oncd it finishes, reboot Ubuntu.
Download the Client App from the Play Store, SteamLink Keyboard Mouse Companion Open the app, press Connect and select the ubuntu machine in the list of paired devices.
If you wish to contribute there is pleanty of work to be done. You can view the Future section in the Dashboard for contributions.
Right now:
- Using Wireless TCP and UDP sockets as an alternative for Bluetooth (TCP for keys and Buttons, UDP for mouse movement)
- Support for differente Layouts, right now the only supported layout is US
- Implement Pairing mechanism inside the Android app, right now pairing must be doen using Android native Bluetooth interface
- Implement Gamepad Support in Server
- Create Gamepad in Android
- Scripts for other Linux Distributions
- Implement Application in BLE (currently using deprecated API)
- Implement new transmission protocol, in order to use less bytes (currently always sending and receiving 10 bytes)
Don't forget to check out the Wiki containing usefull information, such as Architecture, Research and References