16 lines
19 KiB
HTML
16 lines
19 KiB
HTML
<!doctype html><html lang=en dir=auto><head><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier | Akilan</title>
|
||
<meta name=keywords content="WebRTC,laplace"><meta name=description content="Modifying the open source project laplace to allow remote keyboard and mouse during screenshare"><meta name=author content="Akilan Selvacoumar"><link rel=canonical href=http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/><link crossorigin=anonymous href=/assets/css/stylesheet.f49d66caae9ea0fd43f21f29e71a8d3e284517ed770f2aa86fa012953ad3c9ef.css integrity="sha256-9J1myq6eoP1D8h8p5xqNPihFF+13Dyqob6ASlTrTye8=" rel="preload stylesheet" as=style><link rel=icon href=http://localhost:1313/favicon.ico><link rel=icon type=image/png sizes=16x16 href=http://localhost:1313/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=http://localhost:1313/favicon-32x32.png><link rel=apple-touch-icon href=http://localhost:1313/apple-touch-icon.png><link rel=mask-icon href=http://localhost:1313/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:url" content="http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/"><meta property="og:site_name" content="Akilan"><meta property="og:title" content="Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier"><meta property="og:description" content="Modifying the open source project laplace to allow remote keyboard and mouse during screenshare"><meta property="og:locale" content="en"><meta property="og:type" content="article"><meta property="article:section" content="technicalposts"><meta property="article:published_time" content="2021-07-05T00:00:00+00:00"><meta property="article:modified_time" content="2021-07-05T00:00:00+00:00"><meta property="article:tag" content="WebRTC"><meta property="article:tag" content="Laplace"><meta name=twitter:card content="summary"><meta name=twitter:title content="Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier"><meta name=twitter:description content="Modifying the open source project laplace to allow remote keyboard and mouse during screenshare"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Technical Posts","item":"http://localhost:1313/technicalposts/"},{"@type":"ListItem","position":2,"name":"Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier","item":"http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier","name":"Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier","description":"Modifying the open source project laplace to allow remote keyboard and mouse during screenshare","keywords":["WebRTC","laplace"],"articleBody":"What is laplace ? \" Laplace is an open-source project to enable screen sharing directly via browser. Made possible using WebRTC for low latency peer-to-peer connections, and WebSocket implemented in golang for WebRTC signaling. \"\nlink: https://github.com/adamyordan/laplace\nLink to my branch which has Barrier intergrated with Barrier KVM: https://github.com/Akilan1999/laplace/tree/keyboard_mouse\nLink to the pull request: https://github.com/adamyordan/laplace/pull/8\nInstallation Installation required to share keyboard and mouse To do this we ensure that the client either has has a IPV6 address or a public IPV4 address. We use the use the popular open repository known as Barrier KVM.\nWhat is Barrier kvm? “Barrier is software that mimics the functionality of a KVM switch, which historically would allow you to use a single keyboard and mouse to control multiple computers by physically turning a dial on the box to switch the machine you’re controlling at any given moment. Barrier does this in software, allowing you to tell it which machine to control by moving your mouse to the edge of the screen, or by using a keypress to switch focus to a different system.” Barrier KVM\nBarrier KVM build status and links to install Platform Build Status Linux Mac Windows Debug Windows Release Snap Build from source $ git clone https://github.com/adamyordan/laplace.git $ cd laplace \u0026\u0026 go build -o laplace main.go $ export LAPLACE = $PATH $ ./laplace --help $ ./laplace -setconfig $ ./laplace -tls -addrs : Note: ensure you are running none using Sudo\nLimitation The machine that wants to control the screen needs to either be:\nSame network as the server Needs to have an IPV6 address Needs to have an public IPV4 address Vidoe demo Video demo server side installation Video demo client side installation ","wordCount":"284","inLanguage":"en","datePublished":"2021-07-05T00:00:00Z","dateModified":"2021-07-05T00:00:00Z","author":{"@type":"Person","name":"Akilan Selvacoumar"},"mainEntityOfPage":{"@type":"WebPage","@id":"http://localhost:1313/technicalposts/modifying-laplace-keyboard-mouse/"},"publisher":{"@type":"Organization","name":"Akilan","logo":{"@type":"ImageObject","url":"http://localhost:1313/favicon.ico"}}}</script></head><body id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=http://localhost:1313/ accesskey=h title="Akilan (Alt + H)">Akilan</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme"><svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=http://localhost:1313/about/ title=About><span>About</span></a></li><li><a href=http://localhost:1313/resume/ title=Resumé><span>Resumé</span></a></li><li><a href=http://localhost:1313/projects/ title=Projects><span>Projects</span></a></li><li><a href=http://localhost:1313/technicalposts/ title="Technical Posts"><span>Technical Posts</span></a></li><li><a href=http://localhost:1313/generalposts/ title="General Posts"><span>General Posts</span></a></li><li><a href=http://localhost:1313/papers/ title=Papers><span>Papers</span></a></li><li><a href=http://localhost:1313/chat/ title=Chat><span>Chat</span></a></li><li><a href=http://localhost:1313/hiking/ title=Hiking><span>Hiking</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><div class=breadcrumbs><a href=http://localhost:1313/>Home</a> » <a href=http://localhost:1313/technicalposts/>Technical Posts</a></div><h1 class="post-title entry-hint-parent">Patch: Using remote ScreenShare ,keyboard and mouse using laplace and Barrier</h1><div class=post-meta><span title='2021-07-05 00:00:00 +0000 UTC'>2021-05-07</span> · 2 min · Akilan Selvacoumar | <a href=https://github.com/Akilan1999/Akilan-website/tree/master/content/technicalposts/Modifying-laplace-keyboard-mouse.md rel="noopener noreferrer" target=_blank>Suggest Changes</a></div></header><div class=toc><details><summary accesskey=c title="(Alt + C)"><span class=details>Table of Contents</span></summary><div class=inner><ul><li><a href=#what-is-laplace- aria-label="What is laplace ?">What is laplace ?</a></li><li><a href=#installation aria-label=Installation>Installation</a><ul><li><a href=#installation-required-to-share-keyboard-and-mouse aria-label="Installation required to share keyboard and mouse">Installation required to share keyboard and mouse</a><ul><li><a href=#what-is-barrier-kvm aria-label="What is Barrier kvm?">What is Barrier kvm?</a></li><li><a href=#barrier-kvm-build-status-and-links-to-install aria-label="Barrier KVM build status and links to install">Barrier KVM build status and links to install</a></li></ul></li><li><a href=#build-from-source aria-label="Build from source">Build from source</a></li></ul></li><li><a href=#limitation aria-label=Limitation>Limitation</a></li><li><a href=#vidoe-demo aria-label="Vidoe demo">Vidoe demo</a><ul><ul><li><a href=#video-demo-server-side-installation aria-label="Video demo server side installation">Video demo server side installation</a></li><li><a href=#video-demo-client-side-installation aria-label="Video demo client side installation">Video demo client side installation</a></li></ul></ul></li></ul></div></details></div><div class=post-content><h2 id=what-is-laplace->What is laplace ?<a hidden class=anchor aria-hidden=true href=#what-is-laplace->#</a></h2><p>" Laplace is an open-source project to enable screen sharing directly via browser. Made possible using WebRTC for low latency peer-to-peer connections, and WebSocket implemented in golang for WebRTC signaling. "</p><p>link: <a href=https://github.com/adamyordan/laplace>https://github.com/adamyordan/laplace</a></p><p>Link to my branch which has Barrier intergrated with Barrier KVM:
|
||
<a href=https://github.com/Akilan1999/laplace/tree/keyboard_mouse>https://github.com/Akilan1999/laplace/tree/keyboard_mouse</a></p><p>Link to the pull request: <a href=https://github.com/adamyordan/laplace/pull/8>https://github.com/adamyordan/laplace/pull/8</a></p><h2 id=installation>Installation<a hidden class=anchor aria-hidden=true href=#installation>#</a></h2><h3 id=installation-required-to-share-keyboard-and-mouse>Installation required to share keyboard and mouse<a hidden class=anchor aria-hidden=true href=#installation-required-to-share-keyboard-and-mouse>#</a></h3><p>To do this we ensure that the client either has has a IPV6
|
||
address or a public IPV4 address.
|
||
We use the use the popular open repository known as <a href=https://github.com/debauchee/barrier>Barrier KVM</a>.</p><h4 id=what-is-barrier-kvm>What is Barrier kvm?<a hidden class=anchor aria-hidden=true href=#what-is-barrier-kvm>#</a></h4><p>“Barrier is software that mimics the functionality of a KVM switch, which historically would allow you to use a single keyboard and mouse to control multiple computers by physically turning a dial on the box to switch the machine you’re controlling at any given moment. Barrier does this in software, allowing you to tell it which machine to control by moving your mouse to the edge of the screen, or by using a keypress to switch focus to a different system.” <a href=https://github.com/debauchee/barrier>Barrier KVM</a></p><h4 id=barrier-kvm-build-status-and-links-to-install>Barrier KVM build status and links to install<a hidden class=anchor aria-hidden=true href=#barrier-kvm-build-status-and-links-to-install>#</a></h4><table><thead><tr><th style=text-align:right>Platform</th><th style=text-align:left>Build Status</th></tr></thead><tbody><tr><td style=text-align:right>Linux</td><td style=text-align:left><a href="https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master"><img alt="Build Status" loading=lazy src="https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Linux%20Build"></a></td></tr><tr><td style=text-align:right>Mac</td><td style=text-align:left><a href="https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master"><img alt="Build Status" loading=lazy src="https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Mac%20Build"></a></td></tr><tr><td style=text-align:right>Windows Debug</td><td style=text-align:left><a href="https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master"><img alt="Build Status" loading=lazy src="https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Windows%20Build&configuration=Windows%20Build%20Debug"></a></td></tr><tr><td style=text-align:right>Windows Release</td><td style=text-align:left><a href="https://dev.azure.com/debauchee/Barrier/_build/latest?definitionId=1&branchName=master"><img alt="Build Status" loading=lazy src="https://dev.azure.com/debauchee/Barrier/_apis/build/status/debauchee.barrier?branchName=master&jobName=Windows%20Build&configuration=Windows%20Build%20Release%20with%20Release%20Installer"></a></td></tr><tr><td style=text-align:right>Snap</td><td style=text-align:left><a href=https://build.snapcraft.io/user/debauchee/barrier><img alt="Snap Status" loading=lazy src=https://build.snapcraft.io/badge/debauchee/barrier.svg></a></td></tr></tbody></table><h3 id=build-from-source>Build from source<a hidden class=anchor aria-hidden=true href=#build-from-source>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>$ git clone https://github.com/adamyordan/laplace.git
|
||
</span></span><span style=display:flex><span>$ cd laplace <span style=color:#f92672>&&</span> go build -o laplace main.go
|
||
</span></span><span style=display:flex><span>$ export LAPLACE <span style=color:#f92672>=</span> $PATH
|
||
</span></span><span style=display:flex><span>$ ./laplace --help
|
||
</span></span><span style=display:flex><span>$ ./laplace -setconfig
|
||
</span></span><span style=display:flex><span>$ ./laplace -tls -addrs <ip address>:<port no>
|
||
</span></span></code></pre></div><p>Note: ensure you are running none using Sudo</p><h2 id=limitation>Limitation<a hidden class=anchor aria-hidden=true href=#limitation>#</a></h2><p>The machine that wants to control the screen needs to either be:</p><ul><li>Same network as the server</li><li>Needs to have an IPV6 address</li><li>Needs to have an public IPV4 address</li></ul><h2 id=vidoe-demo>Vidoe demo<a hidden class=anchor aria-hidden=true href=#vidoe-demo>#</a></h2><h4 id=video-demo-server-side-installation>Video demo server side installation<a hidden class=anchor aria-hidden=true href=#video-demo-server-side-installation>#</a></h4><div style=position:relative;padding-bottom:56.25%;height:0;overflow:hidden><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen loading=eager referrerpolicy=strict-origin-when-cross-origin src="https://www.youtube.com/embed/7c1_jlXJW4Q?autoplay=0&controls=1&end=0&loop=0&mute=0&start=0" style=position:absolute;top:0;left:0;width:100%;height:100%;border:0 title="YouTube video"></iframe></div><h4 id=video-demo-client-side-installation>Video demo client side installation<a hidden class=anchor aria-hidden=true href=#video-demo-client-side-installation>#</a></h4><div style=position:relative;padding-bottom:56.25%;height:0;overflow:hidden><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen loading=eager referrerpolicy=strict-origin-when-cross-origin src="https://www.youtube.com/embed/gF70pqvN3Gk?autoplay=0&controls=1&end=0&loop=0&mute=0&start=0" style=position:absolute;top:0;left:0;width:100%;height:100%;border:0 title="YouTube video"></iframe></div></div><footer class=post-footer><ul class=post-tags><li><a href=http://localhost:1313/tags/webrtc/>WebRTC</a></li><li><a href=http://localhost:1313/tags/laplace/>Laplace</a></li></ul><nav class=paginav><a class=prev href=http://localhost:1313/technicalposts/p2prc-plugin-module-implementation/><span class=title>« Prev</span><br><span>P2PRC Plugin module implementation</span>
|
||
</a><a class=next href=http://localhost:1313/technicalposts/p2prc-1.0.0-alpha-release/><span class=title>Next »</span><br><span>Alpha Release P2PRC v1.0.0</span></a></nav></footer></article></main><footer class=footer><span>© 2025 <a href=http://localhost:1313/>Akilan</a></span> ·
|
||
<span>Powered by
|
||
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
|
||
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg>
|
||
</a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script></body></html> |