{"id":13418179,"url":"https://github.com/libratbag/libratbag","last_synced_at":"2025-05-14T00:08:43.878Z","repository":{"id":38007562,"uuid":"41394739","full_name":"libratbag/libratbag","owner":"libratbag","description":"A DBus daemon to configure input devices, mainly high-end and gaming mice","archived":false,"fork":false,"pushed_at":"2025-05-10T11:00:22.000Z","size":10012,"stargazers_count":2223,"open_issues_count":280,"forks_count":273,"subscribers_count":32,"default_branch":"master","last_synced_at":"2025-05-10T11:29:03.244Z","etag":null,"topics":["hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/libratbag.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-08-26T00:18:46.000Z","updated_at":"2025-05-10T10:59:45.000Z","dependencies_parsed_at":"2023-02-18T21:45:28.102Z","dependency_job_id":"b09c0edc-4f86-422a-b455-24cc18dd083b","html_url":"https://github.com/libratbag/libratbag","commit_stats":{"total_commits":2376,"total_committers":128,"mean_commits":18.5625,"dds":0.6174242424242424,"last_synced_commit":"d82821fd62b2025af2bdb6ff74051d8e8eb811c4"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libratbag%2Flibratbag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libratbag%2Flibratbag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libratbag%2Flibratbag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libratbag%2Flibratbag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/libratbag","download_url":"https://codeload.github.com/libratbag/libratbag/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254043997,"owners_count":22005056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest"],"created_at":"2024-07-30T22:00:59.345Z","updated_at":"2025-05-14T00:08:38.853Z","avatar_url":"https://github.com/libratbag.png","language":"C","funding_links":[],"categories":["C","TODO scan for Android support in followings","Utilities"],"sub_categories":["Advanced"],"readme":"libratbag\n=========\n\n\u003cimg src=\"https://libratbag.github.io/_images/logo.svg\" alt=\"\" width=\"30%\" align=\"right\"\u003e\n\nlibratbag provides **ratbagd**, a DBus daemon to configure input devices,\nmainly gaming mice. The daemon provides a generic way to access the various\nfeatures exposed by these mice and abstracts away hardware-specific and\nkernel-specific quirks.\n\nlibratbag currently supports devices from Logitech, Etekcity, GSkill,\nRoccat, Steelseries. See [the device\nfiles](https://github.com/libratbag/libratbag/tree/master/data/devices) for\na complete list of supported devices.\n\nUsers interact through a GUI like\n[Piper](https://github.com/libratbag/piper/). For developers, the\n`ratbagctl` tool is the prime tool for debugging.\n\nInstalling libratbag from system packages\n-----------------------------------------\n\nlibratbag is packaged for some distributions, you can use your system's\npackage manager to install it. See [the\nwiki](https://github.com/libratbag/libratbag/wiki/Installation) for details.\n\nCompiling libratbag\n-------------------\n\nlibratbag uses the [meson build system](http://mesonbuild.com) which in\nturn uses ninja to invoke the compiler. Run the following commands to clone\nlibratbag and initialize the build:\n\n    git clone https://github.com/libratbag/libratbag.git\n    cd libratbag\n    meson builddir\n    ninja -C builddir\n    sudo ninja -C builddir install\n\nThe default prefix is `/usr/local`, i.e. it will not overwrite the system\ninstallation. For more information, see [the\nwiki](https://github.com/libratbag/libratbag/wiki/Installation).\n\nAnd to build or re-build after code-changes, run:\n\n    ninja -C builddir\n    sudo ninja -C builddir install\n    \nTo remove/uninstall simply run:\n\n    sudo ninja -C builddir uninstall\n\nNote: `builddir` is the build output directory and can be changed to any\nother directory name. To set configure-time options, use e.g.\n\n    meson configure builddir -Ddocumentation=false\n\nRun `meson configure builddir` to list the options.\n\nRunning ratbagd as DBus-activated systemd service\n-------------------------------------------------\n\nTo run ratbagd, simply run it as root `sudo ratbagd`. However,\nratbagd is intended to run as dbus-activated systemd service and installs\nthe following files:\n\n    /usr/share/dbus-1/system.d/org.freedesktop.ratbag1.conf\n    /usr/share/dbus-1/system-services/org.freedesktop.ratbag1.conf\n    /usr/share/systemd/system/ratbagd.service\n\nThese files are installed into the prefix by `ninja install`, see also the\nconfigure-time options `-Dsystemd-unit-dir` and `-Ddbus-root-dir`.\nDevelopers are encouraged to simply symlink to the files in the git\nrepository.\n\nFor the files to take effect, you should run\n\n    sudo systemctl daemon-reload\n    sudo systemctl reload dbus.service\n\nAnd finally, to enable the service:\n\n    sudo systemctl enable ratbagd.service\n\nThis places the required symlink into the systemd directory so that dbus\nactivation is possible.\n\nThe DBus Interface\n-------------------\n\nFull documentation of the DBus interface to interact with devices is\navailable here: [ratbagd DBus Interface description](https://libratbag.github.io/).\n\nlibratbag Internal Architecture\n-------------------------------\n\nlibratbag has two main components, libratbag and ratbagd. Applications like\nPiper talk over DBus to ratbagd. ratbagd uses libratbag to access the actual\ndevices.\n\n    +-------+    +------+    +---------+    +-----------+\n    | Piper | -\u003e | DBus | -\u003e | ratbagd | -\u003e | libratbag | -\u003e device\n    +-------+    +------+    +---------+    +-----------+\n\n\nInside libratbag, we have the general frontend and API. Each device is\nhandled by a HW-specific backend.  That HW backend is responsible for the\ndevice-specific communication (usually some vendor-specific HID protocol).\n\n    +---------+    +-----+    +------------+    +----------+\n    | ratbagd | -\u003e | API | -\u003e | hw backend | -\u003e | protocol | -\u003e device\n    +---------+    +-----+    +------------+    +----------+\n\nThe API layer is HW agnostic. Depend on the HW, the protocol may be part of\nthe driver implementation (e.g. etekcity) or a separate set of files\n(HID++). Where the protocol is separate, the whole known protocol should be\nimplemented. The HW driver then only accesses the bits required for\nlibratbag. This allows us to optionally export the protocol as separate\nlibrary in the future, if other projects require it.\n\nAdding Devices to libratbag\n---------------------------\n\nlibratbag relies on a device database to match a device with the drivers.\nSee the [data/devices/](https://github.com/libratbag/libratbag/tree/master/data/devices)\ndirectory for the set of known devices. These files\nare usually installed into `$prefix/$datadir` (e.g. `/usr/share/libratbag/`).\n\nAdding a new device can be as simple as adding a new `.device` file. This is\nthe case for many devices with a shared protocol (e.g. Logitech's HID++).\nSee the\n[data/devices/device.example](https://github.com/libratbag/libratbag/tree/master/data/devices/device.example)\nfile for guidance on what information must be set. Look for existing devices\nfrom the same vendor as guidance too.\n\nIf the device has a different protocol and doesn't work after adding the\ndevice file, you'll have to start reverse-engineering the device-specific\nprotocol. Good luck :)\n\nSource\n------\n\n    git clone https://github.com/libratbag/libratbag.git\n\nBugs\n----\n\nBugs can be reported in [our issue tracker](https://github.com/libratbag/libratbag/issues)\n\nMailing list\n------------\n\nlibratbag discussions happen on the [input-tools mailing\nlist](http://lists.freedesktop.org/archives/input-tools/) hosted on\nfreedesktop.org\n\nDevice-specific notes\n---------------------\n\nA number of device-specific notes and observations can be found in our\nwiki: https://github.com/libratbag/libratbag/wiki/Devices\n\nLicense\n-------\n\nlibratbag is licensed under the MIT license.\n\n\u003e Permission is hereby granted, free of charge, to any person obtaining a\n\u003e copy of this software and associated documentation files (the \"Software\"),\n\u003e to deal in the Software without restriction, including without limitation\n\u003e the rights to use, copy, modify, merge, publish, distribute, sublicense,\n\u003e and/or sell copies of the Software, and to permit persons to whom the\n\u003e Software is furnished to do so, subject to the following conditions: [...]\n\nSee the COPYING file for the full license information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibratbag%2Flibratbag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flibratbag%2Flibratbag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibratbag%2Flibratbag/lists"}