[{"data":1,"prerenderedAt":446},["ShallowReactive",2],{"i-lucide:menu":3,"i-simple-icons:github":8,"docs-\u002Fdocs\u002Finstallation":10,"docs-nav":416,"i-lucide:book-open":430,"i-lucide:download":432,"i-lucide:shield-check":434,"i-lucide:layers":436,"i-lucide:wrench":438,"i-lucide:arrow-left":440,"i-lucide:arrow-right":442,"i-lucide:info":444},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"id":11,"title":12,"body":13,"description":408,"extension":409,"icon":410,"meta":411,"navigation":331,"order":72,"path":412,"seo":413,"stem":414,"__hash__":415},"docs\u002Fdocs\u002F1.installation.md","Installation",{"type":14,"value":15,"toc":399},"minimark",[16,20,24,29,51,55,123,140,144,150,181,190,209,213,216,234,260,263,275,290,295,351,357,372,379,382,388,395],[17,18,12],"h1",{"id":19},"installation",[21,22,23],"p",{},"OpenLogi ships as a native desktop application. Installation has two parts: the\npackage itself, and a one-time permission step that lets the app reach your\nhardware without running as root.",[25,26,28],"h2",{"id":27},"requirements","Requirements",[30,31,32,45,48],"ul",{},[33,34,35,36,40,41,44],"li",{},"A 64-bit Linux system with ",[37,38,39],"code",{},"systemd"," (for the ",[37,42,43],{},"uaccess"," permission mechanism)",[33,46,47],{},"A Logitech device that speaks HID++ — anything using Bolt, Unifying,\nLightspeed, Bluetooth, or a direct USB cable",[33,49,50],{},"Wayland or X11; both are fully supported",[25,52,54],{"id":53},"install-the-package","Install the package",[56,57,58,87,105],"code-group",{},[59,60,66],"pre",{"className":61,"code":62,"filename":63,"language":64,"meta":65,"style":65},"language-bash shiki shiki-themes github-dark-dimmed","sudo apt install .\u002Fopenlogi_0.1.0_amd64.deb\n","Debian \u002F Ubuntu","bash","",[37,67,68],{"__ignoreMap":65},[69,70,73,77,81,84],"span",{"class":71,"line":72},"line",1,[69,74,76],{"class":75},"s7B5-","sudo",[69,78,80],{"class":79},"sP_-H"," apt",[69,82,83],{"class":79}," install",[69,85,86],{"class":79}," .\u002Fopenlogi_0.1.0_amd64.deb\n",[59,88,91],{"className":61,"code":89,"filename":90,"language":64,"meta":65,"style":65},"sudo dnf install .\u002Fopenlogi-0.1.0-1.x86_64.rpm\n","Fedora \u002F RHEL",[37,92,93],{"__ignoreMap":65},[69,94,95,97,100,102],{"class":71,"line":72},[69,96,76],{"class":75},[69,98,99],{"class":79}," dnf",[69,101,83],{"class":79},[69,103,104],{"class":79}," .\u002Fopenlogi-0.1.0-1.x86_64.rpm\n",[59,106,109],{"className":61,"code":107,"filename":108,"language":64,"meta":65,"style":65},"yay -S openlogi-bin\n","Arch Linux",[37,110,111],{"__ignoreMap":65},[69,112,113,116,120],{"class":71,"line":72},[69,114,115],{"class":75},"yay",[69,117,119],{"class":118},"sDGpf"," -S",[69,121,122],{"class":79}," openlogi-bin\n",[21,124,125,126,129,130,133,134,139],{},"The ",[37,127,128],{},".deb"," and ",[37,131,132],{},".rpm"," packages run the permission setup automatically as part of\ninstallation. If you use those, skip ahead to ",[135,136,138],"a",{"href":137},"#first-run","First run",".",[25,141,143],{"id":142},"build-from-source","Build from source",[21,145,146,147,139],{},"You need a Rust toolchain, Node.js 20 or newer, and ",[37,148,149],{},"pnpm",[59,151,153],{"className":61,"code":152,"language":64,"meta":65,"style":65},"git clone https:\u002F\u002Fgithub.com\u002Fmohin7\u002Fopenlogi\ncd openlogi\n.\u002Fscripts\u002Fsetup.sh\n",[37,154,155,166,175],{"__ignoreMap":65},[69,156,157,160,163],{"class":71,"line":72},[69,158,159],{"class":75},"git",[69,161,162],{"class":79}," clone",[69,164,165],{"class":79}," https:\u002F\u002Fgithub.com\u002Fmohin7\u002Fopenlogi\n",[69,167,169,172],{"class":71,"line":168},2,[69,170,171],{"class":118},"cd",[69,173,174],{"class":79}," openlogi\n",[69,176,178],{"class":71,"line":177},3,[69,179,180],{"class":75},".\u002Fscripts\u002Fsetup.sh\n",[21,182,183,186,187,189],{},[37,184,185],{},"setup.sh"," asks for ",[37,188,76],{}," exactly once, then installs build dependencies and\nthe udev rule together. Afterwards:",[59,191,193],{"className":61,"code":192,"language":64,"meta":65,"style":65},"pnpm install\npnpm app:build\n",[37,194,195,202],{"__ignoreMap":65},[69,196,197,199],{"class":71,"line":72},[69,198,149],{"class":75},[69,200,201],{"class":79}," install\n",[69,203,204,206],{"class":71,"line":168},[69,205,149],{"class":75},[69,207,208],{"class":79}," app:build\n",[25,210,212],{"id":211},"permission-setup","Permission setup",[21,214,215],{},"This is the only step that needs root, and it only happens once. It installs a\nudev rule that does two things:",[21,217,218,222,223,226,227,229,230,233],{},[219,220,221],"strong",{},"Grants you access to Logitech HID endpoints."," The rule tags Logitech\n",[37,224,225],{},"hidraw"," nodes with ",[37,228,43],{},", which makes ",[37,231,232],{},"systemd-logind"," attach an ACL for\nwhoever is logged in at the physical seat. The access is granted at login and\nrevoked at logout.",[21,235,236,242,243,246,247,250,251,254,255,259],{},[219,237,238,239,139],{},"Grants write access to ",[37,240,241],{},"\u002Fdev\u002Fuinput"," Remapped buttons are delivered by\nsynthesising input events, which requires writing to ",[37,244,245],{},"uinput",". OpenLogi creates\na dedicated ",[37,248,249],{},"openlogi"," group for this rather than using the conventional ",[37,252,253],{},"input","\ngroup — see ",[135,256,258],{"href":257},"\u002Fdocs\u002Fpermissions","Permissions"," for why that distinction matters.",[21,261,262],{},"If you installed from a package, this already ran. To do it manually:",[59,264,266],{"className":61,"code":265,"language":64,"meta":65,"style":65},"sudo .\u002Fscripts\u002Finstall-udev-rules.sh\n",[37,267,268],{"__ignoreMap":65},[69,269,270,272],{"class":71,"line":72},[69,271,76],{"class":75},[69,273,274],{"class":79}," .\u002Fscripts\u002Finstall-udev-rules.sh\n",[276,277,279],"callout",{"icon":278},"lucide:info",[21,280,281,282,285,286,289],{},"Group membership only applies to ",[219,283,284],{},"new"," login sessions. After the first\ninstall, log out and back in — or start the app once with\n",[37,287,288],{},"newgrp openlogi"," to test immediately.",[291,292,294],"h3",{"id":293},"verify-it-worked","Verify it worked",[59,296,298],{"className":61,"code":297,"language":64,"meta":65,"style":65},"# Expect a \"user:\" ACL entry for your username\ngetfacl -p \u002Fdev\u002Fhidraw0 | grep '^user:'\n\n# Expect group \"openlogi\"\nls -l \u002Fdev\u002Fuinput\n",[37,299,300,306,327,333,339],{"__ignoreMap":65},[69,301,302],{"class":71,"line":72},[69,303,305],{"class":304},"sVrTk","# Expect a \"user:\" ACL entry for your username\n",[69,307,308,311,314,317,321,324],{"class":71,"line":168},[69,309,310],{"class":75},"getfacl",[69,312,313],{"class":118}," -p",[69,315,316],{"class":79}," \u002Fdev\u002Fhidraw0",[69,318,320],{"class":319},"scLw-"," |",[69,322,323],{"class":75}," grep",[69,325,326],{"class":79}," '^user:'\n",[69,328,329],{"class":71,"line":177},[69,330,332],{"emptyLinePlaceholder":331},true,"\n",[69,334,336],{"class":71,"line":335},4,[69,337,338],{"class":304},"# Expect group \"openlogi\"\n",[69,340,342,345,348],{"class":71,"line":341},5,[69,343,344],{"class":75},"ls",[69,346,347],{"class":118}," -l",[69,349,350],{"class":79}," \u002Fdev\u002Fuinput\n",[21,352,353,354,356],{},"If ",[37,355,241],{}," does not exist at all, the kernel module is not loaded:",[59,358,360],{"className":61,"code":359,"language":64,"meta":65,"style":65},"sudo modprobe uinput\n",[37,361,362],{"__ignoreMap":65},[69,363,364,366,369],{"class":71,"line":72},[69,365,76],{"class":75},[69,367,368],{"class":79}," modprobe",[69,370,371],{"class":79}," uinput\n",[21,373,374,375,378],{},"The install script writes ",[37,376,377],{},"\u002Fetc\u002Fmodules-load.d\u002Fopenlogi.conf"," so this happens\nautomatically on every boot.",[25,380,138],{"id":381},"first-run",[21,383,384,385,387],{},"Launch OpenLogi from your application menu, or run ",[37,386,249],{}," from a terminal.\nConnected devices appear automatically — there is no pairing or sign-in step.",[21,389,390,391,139],{},"If your device does not appear, work through\n",[135,392,394],{"href":393},"\u002Fdocs\u002Ftroubleshooting","Troubleshooting",[396,397,398],"style",{},"html pre.shiki code .s7B5-, html code.shiki .s7B5-{--shiki-default:#F69D50}html pre.shiki code .sP_-H, html code.shiki .sP_-H{--shiki-default:#96D0FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sDGpf, html code.shiki .sDGpf{--shiki-default:#6CB6FF}html pre.shiki code .sVrTk, html code.shiki .sVrTk{--shiki-default:#768390}html pre.shiki code .scLw-, html code.shiki .scLw-{--shiki-default:#F47067}",{"title":65,"searchDepth":177,"depth":177,"links":400},[401,402,403,404,407],{"id":27,"depth":168,"text":28},{"id":53,"depth":168,"text":54},{"id":142,"depth":168,"text":143},{"id":211,"depth":168,"text":212,"children":405},[406],{"id":293,"depth":177,"text":294},{"id":381,"depth":168,"text":138},"Install OpenLogi on Debian, Ubuntu, Fedora, Arch, or from source, and complete the one-time permission setup.","md","lucide:download",{},"\u002Fdocs\u002Finstallation",{"title":12,"description":408},"docs\u002F1.installation","t2TPI76Kn-zic4bPJ_BAkDx_Inxu-qtQyl90fhxgyNo",[417,421,422,424,428],{"path":418,"title":419,"icon":420,"order":4},"\u002Fdocs","Introduction","lucide:book-open",{"path":412,"title":12,"icon":410,"order":72},{"path":257,"title":258,"icon":423,"order":168},"lucide:shield-check",{"path":425,"title":426,"icon":427,"order":177},"\u002Fdocs\u002Farchitecture","Architecture","lucide:layers",{"path":393,"title":394,"icon":429,"order":335},"lucide:wrench",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":431},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m8.001-2A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":433},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\u002F>\u003Cpath d=\"m7 10l5 5l5-5\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":435},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\"\u002F>\u003Cpath d=\"m9 12l2 2l4-4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":437},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\"\u002F>\u003Cpath d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\"\u002F>\u003Cpath d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":439},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":441},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":443},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":445},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 16v-4m0-4h.01\"\u002F>\u003C\u002Fg>",1789403123747]