Share Your Keyboard and Mouse Between Linux and Raspberry Pi

This DIY tutorial teaches you to share mouse and keyboard between multiple computers using open source software Barrier.

I have a multi-monitor setup where my Dell XPS running Ubuntu is connected to two external monitors. I recently got a Raspberry Pi 4 that has the capability to double up as a desktop. I bought a new screen so that I could set it up for monitoring the performance of my cloud servers.

Now the problem is that I have fours screens and one pair of keyboard and mouse. I could use a new keyboard-mouse pair but my desk doesn’t have enough free space and it’s not very convenient to switch keyboards and mouse all the time.

There are two ways to handle this issue:

  • Hardware: Get a keyboard mouse pair that can switch between devices. You may alwao use kvm switch to change the output device.
  • Software: You use a tool like Synergy or its open source fork Barrier (explained in detail in this article).

If you can spend some money, go for the hardware solution. I have started using Dell KM717 wireless keyboard and mouse pair. It allows connecting to three devices, one by RF receiver and the other two by Bluetooth. You can switch between the three separate computers using the switch on the keyboard and mouse. It’s really convenient.

We earn a commission if you make a purchase, at no additional cost to you.
09/26/2022 05:45 pm GMT

Another way to tackle this problem would be to buy a kvm switch. This is a handy gadget that allows you to use the same display screen, keyboard and mouse between several computers running various operating systems. You can easily find one for around $30 on Amazon.

If you cannot go for the hardware solution, try the software based approach to share the keyboard and mouse between computers.

I used Barrier, an open source fork of the now proprietary software Synergy. Synergy Core is still open source but you can’t get encryption option in its GUI. With all its limitation, Barrier works fine for me.

Let’s see how you can use Barrier to share mouse and keyboard with multiple computers. Did I mention that you can even share clipboard and thus copy paste text between the computers?

Set up Barrier to share keyboard and mouse between Linux and Raspberry Pi or other devices

Share Keyboard And Mouse between computers

I have prepared this tutorial with Ubuntu 18.04.3 and Raspbian 10. Some installation instructions may differ based on your distribution and version but you’ll get the idea of what you need to do here.

Step 1: Install Barrier

The first step is obvious. You need to install Barrier in your computer.

Barrier is available in the universe repository starting Ubuntu 19.04 so you can easily install it using apt command.

You’ll have to use the snap version of Barrier in Ubuntu 18.04. Open Software Center and search for Barrier. I recommend using barrier-maxiberta

Barrier Ubuntu Snap
Install this Barrier version

On other distributions, you should enable Snap first and then use this command:

sudo snap install barrier-maxiberta

Barrier is available in Debian 10 repositories. So installing barrier on Raspbian was easy with the apt command:

sudo apt install barrier

Once you have installed the software, it’s time to configure it.

Step 2: Configure Barrier server

Barrier works on server-client model. You should configure your main computer as server and the secondary computer as client.

In my case, my Ubuntu 18.04 is my main system so I set it up as the server. Search for Barrier in menu and start it.

Barrier for sharing mouse and keyboard
Setup Barrier as server

You should see an IP address and an SSL fingerprint. It’s not entirely done because you have to configure the server a little. Click on Configure Server option.

Barrier Server Ubuntu
Configure the Barrier server

In here, you should see your own system in the center. Now you have to drag and drop the computer icon from the top right to a suitable position. The position is important because that’s how your mouse pointer will move between screens.

Barrier Server Configuration
Setup Barrier server with client screens

Do note that you should provide the hostname of the client computer. In my case, it was raspberrypi. It won’t work if the hostname is not correct. Don’t know the client’s hostname? Don’t worry, you can get it from the client system.

Step 3: Setup barrier client

On the second computer, start Barrier and choose to use it as client.

Setup Barrier Client on Raspberry Pi
Setup Barrier Client on Raspberry Pi

You need to provide the IP address of Barrier server. You can find this IP address on the Barrier application running on the main system (see the screenshots in previous section).

Setup Barrier Client on Raspberry Pi
Setup Barrier Client on Raspberry Pi

If you see an option to accept secure connection from another computer, accept it.

You should be now able to move your mouse pointer between the screens connected to two different computers running two different operating systems. How cool is that!

Optional: Autostart Barrier [Intermediate to Advanced Users]

Now that you have setup Barrier and enjoying by using the same mouse and keyboard for more than one computers, what happens when you reboot your system? You need to start Barrier in both the systems again, right? This means that you need to connect keyboard-mouse to the second computer as well.

Since I use Wireless mouse and keyboard, this is still easier as all I need to do is to take the adapter from my laptop and plug it in the Raspberry Pi. This works but I don’t want to do this extra step. This is why I made Barrier running at the start on both systems so that I could use the same mouse and keyboard without any additional step.

There is no autostart option in the Barrier application. But it’s easy to add an application to autostart in Ubuntu. Just open the Startup Applications program and add the command barrier-maxiberta.barrier here.

Adding Barrier To Startup Apps Ubuntu
Adding Barrier To Startup applications in Ubuntu

That was the easy part. It’s not the same in Raspberry Pi though. Since Raspbian uses systemd, you can use it to create a new service that will run at the boot time.

Open a terminal and create a new file named barrier.service in /etc/systemd/system directory. If this directory doesn’t exist, create it. You can use your favorite command line text editor for this task. I used Vim here.

sudo vim /etc/systemd/system/barrier.service

Now add lines like these to your file. You must replace 192.168.0.109 with your barrier server’s IP address.

[Unit]
Description=Barrier Client mouse/keyboard share
Requires=display-manager.service
After=display-manager.service
StartLimitIntervalSec=0

[Service]
Type=forking
ExecStart=/usr/bin/barrierc --no-restart --name raspberrypi --enable-crypto 192.168.0.109
Restart=always
RestartSec=10
User=pi

[Install]
WantedBy=multi-user.target

Save your file. I would advise to run the command mentioned in ExecStart line manually to see if it works or not. This will save you some headache later.

Reload the systemd daemon:

sudo systemctl daemon-reload

Now start this new service

systemctl start barrier.service

Check its status to see if its running fine:

systemctl status barrier.service

If it works, add it to startup services:

systemctl enable barrier.service

This should take care of things for you. Now you should be able to control the Raspberry Pi (or any other second computer) with a single keyboard mouse pair.

I know that these DIY stuff may not work straightforward for everyone so if you face issues, let me know in the comments and I’ll try to help you out.

If it worked for you or if you use some other solution to share the mouse and keyboard between the computers, do mention it in the comments.

Similar Posts

  • I need change chmod permissions of “x” to “/snap/barrier/682/usr/bin/barriers” and disable ssl* in “change config” menu.
    *because I don’t have a certificate in my folder.
    Case of use:
    Server in Linux (Ubuntu 18.04 LTS)
    Client in Windows 11 x64
    Version: 2.4.0-4-gac5a1bfd (Snap Store)
    Thank’s Abhishek Prakash