Giter Club home page Giter Club logo

logiops's Introduction

LogiOps

Build Status

This is an unofficial driver for Logitech mice and keyboard.

This is currently only compatible with HID++ >2.0 devices.

Configuration

Refer to the wiki for details.

You may also refer to logid.example.cfg for an example.

Default location for the configuration file is /etc/logid.cfg, but another can be specified using the -c flag.

Dependencies

This project requires a C++20 compiler, cmake, libevdev, libudev, glib, and libconfig. For popular distributions, I've included commands below.

Arch Linux: sudo pacman -S base-devel cmake libevdev libconfig systemd-libs glib2

Debian/Ubuntu: sudo apt install build-essential cmake pkg-config libevdev-dev libudev-dev libconfig++-dev libglib2.0-dev

Fedora: sudo dnf install cmake libevdev-devel systemd-devel libconfig-devel gcc-c++ glib2-devel

Gentoo Linux: sudo emerge dev-libs/libconfig dev-libs/libevdev dev-libs/glib dev-util/cmake virtual/libudev

Solus: sudo eopkg install cmake libevdev-devel libconfig-devel libgudev-devel glib2-devel

openSUSE: sudo zypper install cmake libevdev-devel systemd-devel libconfig-devel gcc-c++ libconfig++-devel libudev-devel glib2-devel

Building

To build this project, run:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

To install, run sudo make install after building. You can set the daemon to start at boot by running sudo systemctl enable logid or sudo systemctl enable --now logid if you want to enable and start the daemon.

Development

The project may only run as root, but for development purposes, you may find it convenient to run as non-root on the user bus. You must compile with the CMake flag -DUSE_USER_BUS=ON to use the user bus.

Donate

This program is (and will always be) provided free of charge. If you would like to support the development of this project by donating, you can donate to my Ko-Fi below.

Buy Me a Coffee at ko-fi.com

I'm also looking for contributors to help in my project; feel free to submit a pull request or e-mail me if you would like to contribute.

Compatible Devices

For a list of tested devices, check TESTED.md

Credits

Logitech, Logi, and their logos are trademarks or registered trademarks of Logitech Europe S.A. and/or its affiliates in the United States and/or other countries. This software is an independent product that is not endorsed or created by Logitech.

Thanks to the following people for contributing to this repository.

logiops's People

Contributors

abraha2d avatar andy-shi88 avatar aragon999 avatar barrenszeppelin avatar ckiee avatar conikost avatar damageboy avatar deamn avatar fstreun avatar glunardi avatar jef avatar jw910731 avatar kalenpw avatar kostadinsh avatar kris7t avatar lazarin avatar leo-ventura avatar mellolucas avatar michtere avatar mskim-hdel avatar pasanflo avatar pixlone avatar rumesh986 avatar tekq avatar tendstofortytwo avatar vitek avatar wooparadog avatar wprzytula avatar zak-bahm avatar zv0n avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

logiops's Issues

Few pixels doesn't prevent OnRelease from triggering

I currently have my config set to few pixels for up and down gestures controlling volume and to OnRelease for left and right controlling previous and next song, this does work but has the downside that while moving even a little bit to much to the left or right while adjusting the volume it will skip to the previous or next song, my suggestion would be to detect the axis on which a gesture is moving as soon as possible (after having moved n amount of pixels, maybe configurable) and then after this detection prevent gestures defined on a different axis from triggering.

My configuration file for reference:

devices: (
{
    name: "MX Master 3";
    buttons: (
        {
            cid: 0xc3;
            action =
            {
                type: "Gestures";
                gestures: (
                    {
                        direction: "Up";
                        mode: "OnFewPixels";
                        pixels: 50;
                        action =
                        {
                            type: "Keypress";
                            keys: ["KEY_VOLUMEUP"];
                        };
                    },
                    {
                        direction: "Down";
                        mode: "OnFewPixels";
                        pixels: 50;
                        action =
                        {
                            type: "Keypress";
                            keys: ["KEY_VOLUMEDOWN"];
                        };
                    },
                    {
                        direction: "Left";
                        mode: "OnRelease";
                        action =
                        {
                            type: "Keypress";
                            keys: ["KEY_PREVIOUSSONG"];
                        };
                    },
                    {
                        direction: "Right";
                        mode: "OnRelease";
                        action =
                        {
                            type = "Keypress";
                            keys: ["KEY_NEXTSONG"]
                        }
                    },
                    {
                        direction: "None";
                        mode: "OnRelease";
                        action = 
                        {
                            type: "Keypress";
                            keys: ["KEY_PLAYPAUSE"];
                        }
                    }
                );
            };
        }
    );
}
);

Question: Modifier key + scroll wheel ?

I want to use "Alt + scrollwheel" to switch workspace (Super + Down), how should I approach it? Mx Master 3

Tried to use xbindkeys, didn't work

"xdotool key Super_L+Down"
  super + "b:5"

Few more words on the docs

Heyhey,

first of all: Great job! Maybe you should use some tags like "Logitech Options for Linux" because that was what I tried to find. I more or less stumbled over this lib while trying to find out why libratbag does not work with my Master 2S anymore.

Although this package seems not to be finished by far, I am surprised how great it works even with gestures! But it took much more time than actually necessary to getting things to work for me (I would consider myself as a semi-experienced Linux user).

So...

  • for the config-wiki, maybe you can tell users entering the logid-command will help to identify the device... i know it is obvious but it took some time for me to come across this idea.
  • also in the config-wiki, there is a discrepancy between your gesture-config and the gestures in the example config. In the wiki you're telling sth like buttons: ( { gesture object }, { gesture object } ... );, whereas the gestures actually are wrapped within an action (as given in example-config)
  • and then it might be worth to mention, that logiops expects the logid.cfg within the /etc-directory (I was changing the logid.cfg within the logiops-folder and then remake install 😑)

But using this lib I finally can get all the loved features out of my Master 2S using Linux (that was one of the main problems why I still was using windows on my box...)

Again: Thanks for your great work!

Undefined symbol when running logid -v

Hi @PixlOne,

I installed logiops and all the dependencies, on ubuntu 19.10, including libhidpp, making a symlink /usr/local/lib/libhidpp.so to /usr/lib/libhidpp.so.
When i run logid -v this error is returned:
logid: symbol lookup error: logid: undefined symbol: _ZN7HIDPP109IReceiver6EventsE

What I'm missing?

udev rule to match virtual input device

When logid runs, it creates a virtual device, in my case /dev/input/event18 but this number can change randomly. I would like to have a udev rule match this, so that it can change the permissions on the device file and assign a permalink in /dev/input/by-id/, so that I can have applications open the device reliably even if the /dev/input/event* number changes.

Without this, I can't make use of the extra buttons as they arrive through this custom input device instead of the original one (which I already have a udev rule for.)

One good solution, if possible, would be for this virtual device to supply the same attributes as the USB receiver (just with different values). This would allow the existing rules distributed with udev (which already create symlinks in /dev/input/by-id/) to pick up the virtual device and create the symlinks automatically.

Can't enable hires scrolling on MX Master 2S

Hires scrolling does not work on my MX Master 2S, the mouse scrolls by full increments.

Setting hires: false; target: false; makes scrolling very slow, unusable.
Setting hires: true; target: false; works basically like the regular mouse, no smooth scrolling.
Here's the xinput log(hires enabled):

...
button release 5 
motion a[3]=16530 
button press   5 
button release 5 
motion a[3]=16545 
button press   5 
button release 5 
motion a[3]=16560 
button press   5 
button release 5 
motion a[3]=16575 
...

The motion value increments always my 15 and happen rarely. The button is emulated every motion event.

And here's what I would expect(this is generated by my touchpad):

...
motion a[3]=14032 
motion a[3]=14033 
motion a[3]=14034 
motion a[3]=14035 
motion a[3]=14036 
motion a[3]=14037 
motion a[3]=14038 
motion a[3]=14040 
button press   5 
button release 5 
motion a[3]=14041 
motion a[3]=14042 
motion a[3]=14043 
motion a[3]=14045 
motion a[3]=14045 
...

So I would expect it to scroll quickly by little increments and update motion event multiple times per button emulation.

When I set target: true, no events are generated at all and mouse scrolling does not work.

Can I somehow make the mouse scroll smooth like it is on Windows? Or does hires scroll mean something else?

I'm running Manjaro KDE, Xorg, linux 5.5.

MX Master name issues

Hi!

I'm new to this so this is most certainly an overlook on my part, but I'm trying to find out what should I put into my logid.cfg to configure my mouse.
It's an MX Master and connected with a Logitech Unifying receiver to a USB hub. This is the output from logid:

[INFO] Missing hiresscroll option, not setting.
[INFO] Found Logitech USB Receiver on /dev/hidraw5
[DEBUG] Receiver on /dev/hidraw5: Device 1 paired
[DEBUG] Receiver on /dev/hidraw5: Device 2 paired
[DEBUG] Receiver on /dev/hidraw5: Device 2 paired
[INFO] Link lost to
[DEBUG] Receiver on /dev/hidraw5: Device 2 paired
[DEBUG] Receiver on /dev/hidraw5: Connection established to device 2

I switched it off/on to see if it reconnects.
Xinput tells me this:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech MX Keys                          id=11   [slave  pointer  (2)]
⎜   ↳ Logitech Wireless Mouse PID:4071          id=13   [slave  pointer  (2)]
⎜   ↳ logid                                     id=7    [slave  pointer  (2)]

So I'm not really sure what do I have to put into logid.cfg. I've tried:

name: "MX Master";
name: "Logitech Wireless Mouse MX Master 3";
name: "Logitech Wireless Mouse";
name: "Logitech Wireless Mouse PID:4071";
name: "Device 2";
name: "2";
name: "Logitech USB Receiver";
name: "*";

None of those seem to work :-\

Consider linking to example configuration file on the 'Configuration' page in the wiki

Whilst trying to figure out how to configure logiops, I found the configuration wiki page which goes into detail as to how a configuration file should be laid out, but it doesn't have any examples.

I think linking to the example configuration file in the repo right at the top of the page would be a great idea- especially if you use this file for testing logiops during development, as if the wiki becomes out of date (as the disclaimer warns) at least the example should still be up to date.

P.S. Amazing project! 👍

Mx Master 3 - side scroll wheel

Hi,

I would like to map actions to side scroll wheel (located at left side of mx master 2 or 3). However I haven't found any cid, that represents this scroll wheel.

Is there any possibility to map actions to side scroll wheel on mx master 3?

Thanks in advance!

Building logiops from zip file does not work

Hi, I'd like to report an issue with building logiops using the provided instructions on the Github readme.

If I download the ZIP file and try to build from source, the git submodule checkout for the dependency libhidpp fails and would not continue. I tried to build the master branch of libhidpp and installed it. It seems the include / lib directory structure have changed and logiops would get stuck complaining about the wrong include directory from find_package(libhidpp).

Checking out master via git and then building does not have this issue.

Thanks!

Direction dependent threshold for SmartShift

Now this is a long shot, but as I own the MX Revolution I might be bit spoiled here.
It was possible to have the threshold for the SmarShift threshold (name was different) separately set for upwards and downward scrolling. This is incredibly comfortable as it's much easier to scroll down tha it is to scroll up. I have now idea if it's even possible with the hardware of the MX Master 3, but it would be awsome.

For reference see:
https://github.com/sebastien/revoco

Options for thumb wheel sensitivity

Is it possible to set thumb wheel sensitivity? I didn't find relevant options in wiki. The default sensitivity of the Master 2S thumb wheel is too low to use.

Controlling volume w/ thumb wheel?

How could one control volume with the horizontal thumb wheel? I've tried using CIDs 0x5b & 0x5d and mapping them to the keypresses KEY_VOLUMEDOWN & KEY_VOLUMEUP respectively, but nothing occurs.
In xbindkeys I use

# thumb wheel up => increase volume
"xte 'key XF86AudioRaiseVolume'"
   b:7

# thumb wheel down => lower volume
"xte 'key XF86AudioLowerVolume'"
   b:6

But I'd prefer to run all my mouse controls through a single program.

Unable to set DPI for MX Master

I'm getting these on Linux 5.6.4, with git-2ed3efa:

logid[3580996]: [ERROR] Error while setting DPI: Invalid argument
logid[3580996]: [ERROR] HID++ 1.0 Error whjle configuring MX Master: Resource error
logid[3580996]: [ERROR] Error while setting DPI: Invalid argument
logid[3580996]: [ERROR] Error while setting DPI: Invalid argument

But only in the systemd service's journal output. When running logid -v from console it doesn't say anything like this.

The mouse is connected with a unifying receiver.

Feature: Action - run command

Hi, it would be nice if you allowed the user to specify custom commands. This would be useful for something like a gesture so that when you move your mouse up/down it will turn the brightness up/down

CID for thumb wheel for mx master 3s

I'm having troubles figuring out what the CID is for the thumb wheel. Is there any way to debug this and press buttons on the mouse and see the corresponding CID of the buttons?

MX Anywhere 2S support?

Hi,

I'm trying to find out if my (bluetooth) mouse, the MX Anywhere 2S, is (partly) working with logiops. It recognizes the mouse. Sees some unknown 'ghost' button pressed when starting the software? But does not seem to recognize any further button presses or gestures. Below the console output:

[23:16:02 e@dell ~$] sudo logid -v
[INFO] MX Anywhere 2S detected: device 255 on /dev/hidraw1
[ERROR] Device does not support SmartShift
[DEBUG] 0x800 was pressed but no action was found.
[INFO] MX Anywhere 2S detected: device 0 on /dev/hidraw1
[ERROR] Device does not support SmartShift

Furthermore it seems to start twice or something?

If I want to try to see if I can make it work where should I start?

Interprocess communication for handling configurations

Currently there's a functional service but no way to communicate with it, if one wishes to change configurations it is necessary to edit "/etc/logid.cfg" and restart logid.

My suggestion is implementing a minimalistic POSIX socket communication system where an external tool can tell logid to use a file in a specific path as a new configuration. This would allow said to tool to quickly change profiles so that things such as application specific profiles would be possible.

Allowing logid to read from a location other than /etc also has the added benefit of tools not needing root privileges to change configurations.

OnFewPixels seems to only work once

I'm trying to hook up my thumb button to react to directional moves while pressed, like in the example configuration. That works fine, but when I try to switch from OnRelease mode to OnFewPixels the action seems to only ever be triggered once, until the next restart of logid.

Feature: Readout of current state

It would be awsome to have some file/socket/log to determine the current stes of the mouse like DPI, HighResScroll. For some reason I'm not even able to read the current DPI setting with ratbagctl.

using bluetooth

hey,
so I've been using this with my MX Master 2S
and works pretty well, but when using it with Bluetooth, hidpp doesn't find the device(tried using the tools in their repo)
However, I can find the device manually.
can you please add an optional tag so we can find the device path and put it manually

Parse error on Line 11: syntax error

Hello, asking for help here, can't seem to figure out why there is an error on the mentioned line

devices: ({
  name: "MX Master 3";

  // A lower threshold number makes the wheel switch to free-spin mode
  // quicker when scrolling fast.
  smartshift: { on: true; threshold: 15; };
	buttons: (
	    // Make top button (0xc4) switch modes
	    { cid: 0xc4; action = { type = "ToggleSmartshift"; }; },

  hiresscroll: { hires: true; invert: false; target: true; };

  // Higher numbers make the mouse more sensitive (cursor moves faster),
  // 4000 max for MX Master 3.
  dpi: 1270;

  buttons: (

    // Make thumb button 10.
    { cid: 0xc3; action = { type: "Keypress"; keys: ["BTN_FORWARD"]; }; },

    // Make top button 11.
    { cid: 0xc4; action = { type: "Keypress"; keys: ["BTN_BACK"];    }; },

  );
});

This is the line in question: hiresscroll: { hires: true; invert: false; target: true; };

Thank you for letting me know what coudl be wrong...

EDIT:

Is there a way to configure horziontal scrolling while holding Shift?

Can't get gestures to work

Great project - much appreciated, thanks.

I'm having trouble getting gestures to work - please help.

Here are the steps I've taken so far:

  1. Using the example config, the gesture button doesn't work
  2. If I change the example config to have a Keypress action instead of gesture for the same cid (0x52) then the key is pressed
  3. If I change the example config to have a Keypress action for direction: "None", then that key is pressed, but no other direction works
  4. If I remove the direction: "None" entry, then gestures don't work

When pressing the gesture button, the mouse pointer doesn't move - as if there is a gesture happening, but nothing happens.

I'm using an MX Master, on Kernel 5.3.7.

Happy to spend some time debugging - let me know how I can help.

Time out on default device

Hi, do you have any idea what I do wrong?
I try to make it work on ubuntu 18.04

`[INFO] Found Logitech USB Receiver on /dev/hidraw0

[INFO] MX Master detected: device 1 on /dev/hidraw0

[ERROR] Time out on default device: /dev/hidraw1 (possibly asleep)`

Keys combo

I am trying to set the action of button 8 to
KEY_LEFTCTRL+KEY_PAGEUP is it possible?

Thank's for your work!

Scrolling speed becomes super slow with logid active

Since a recent update scrolling with the wheel is unusably slow, as soon as logid is running. Stopping the process alone doesn't work either, I actually need to turn my mouse off and on again to make it scroll normally again, too.

Using an MX Master 3.

Terminated called after throwing an instance of 'HIDPP20::Error'

Hello,

I am running into an error when I run "logid -v"

terminate called after throwing an instance of 'HIDPP20::Error'
what(): Invalid function ID
Aborted

My Master MX 2S and keyboard USB receiver can both be successfully detected.

Could you help me with the issue, please?

Thank you in advance!

Documentation: Mention somewhere that it's possible to add gestures for any and all keys

Official Logitech software allows for gestures only for Thumb key, while this driver allows to have gestures for all keys which is amazing (this makes the MX Master 3 to effectively have ~30 buttons). I didn't realize this immediately, since I assumed this driver to only be a subset of official functionality.

I think we could have footnote in README.md that mentions this

https://gist.github.com/Elijas/563dd13c3b7492bdb43e3aa8e861f844

Can't manage to start daemon at boot.

Hello! Thank you for your amazing work!!
For me, everything works just fine, its that i have to start up a terminal and type in
$ sudo logid
in order to make it work, on every single start.
I've tried as advised:
$ sudo systemctl start logid
but unfortunately it just wont start on boot.
I'm not a huge linux mage, and sadly can't figure out the problem by myself. 😞

Implement human readable Ids instead of just Command Ids in config files

I was thinking of adding mappings from human readable button names to their respective CIds so that configuration will be more comfortable.

My thinking on how this could be done is:

  1. DeviceFinder calls a DeviceFactory instead of directly instantiating a device. DeviceFactory is responsible for associating a device name to the correct map. If the device does not have defined mappings it is instantiated without one;
  2. Device uses the map during the processing of the configuration file. If the device does not have a mapping it rejects human readable names, accepting only CIds (as it currently is).

I'm glad to work on this myself, but I'd like some input first (and the CIds for the MX Master 2S, if possible).

In the meantime it's also worth adding to the documentation that CIds can be found with the command:

hidpp20-reprog-controls --device <device index> <device path> info

Where device index and device path can be found with the command:

hidpp-list-devices

Can't find logid.cfg

----- $ sudo systemctl status logid --------

● logid.service - Logitech Configuration Daemon
Loaded: loaded (/lib/systemd/system/logid.service; enabled; vendor preset: en
Active: active (running) since Tue 2020-04-14 09:06:08 EEST; 1min 33s ago
Main PID: 7117 (logid)
Tasks: 10 (limit: 4915)
CGroup: /system.slice/logid.service
└─7117 /usr/local/bin/logid

Apr 14 09:06:08 dini-lnx systemd[1]: Started Logitech Configuration Daemon.
Apr 14 09:06:08 dini-lnx logid[7117]: [ERROR] I/O Error while reading /etc/logid

-------- $ ls /etc/ | grep logi -----------
login.defs

Cannot start logiops: libhidpp.so: cannot open shared object file: No such file or directory

└[~]> systemctl status logid
● logid.service - Logitech Configuration Daemon
   Loaded: loaded (/lib/systemd/system/logid.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2020-03-05 10:28:51 GMT; 55min ago
  Process: 3013 ExecStart=/usr/local/bin/logid (code=exited, status=127)
 Main PID: 3013 (code=exited, status=127)

Mar 05 10:28:51 BFS-P500-3651 systemd[1]: Started Logitech Configuration Daemon.
Mar 05 10:28:51 BFS-P500-3651 logid[3013]: /usr/local/bin/logid: error while loading shared libraries: libhidpp.so: cannot open shared object file: No such file or directory
Mar 05 10:28:51 BFS-P500-3651 systemd[1]: logid.service: Main process exited, code=exited, status=127/n/a
Mar 05 10:28:51 BFS-P500-3651 systemd[1]: logid.service: Failed with result 'exit-code'.
ls /usr/local/lib     
libhidpp.so  node_modules  python2.7  python3.7

Is this the correct location for the libhidpp library?

Unable to install

Hello I'm trying to make and install this repo but I'm unable.

Below are the steps:
auser@PowerPC:~/P/logiops|master$ mkdir build
auser@PowerPC:~/P/logiops|master$ cd build/
auser@PowerPC:~/P/l/build|master$ cmake ..
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Checking for module 'libevdev'
--   Found libevdev, version 1.5.8
-- Checking for module 'systemd'
--   Found systemd, version 237
-- Checking for module 'libconfig'
--   Found libconfig, version 1.5
Could not find libhidpp include dir, getting submodule
-- Checking for module 'libudev'
--   Found libudev, version 237
-- systemd units will be installed at /lib/systemd/system
-- Configuring done
-- Generating done
-- Build files have been written to: /home/auser/Programs/logiops/build
auser@PowerPC:~/P/l/build|master$ make
Scanning dependencies of target hidpp
[  1%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/misc/Log.cpp.o
[  2%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/misc/CRC.cpp.o
[  4%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hid/RawDevice_linux.cpp.o
[  5%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hid/DeviceMonitor_linux.cpp.o
[  7%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hid/UsageStrings.cpp.o
[  8%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Dispatcher.cpp.o
[ 10%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/SimpleDispatcher.cpp.o
[ 11%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/DispatcherThread.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp: In constructor ‘HIDPP::DispatcherThread::DispatcherThread(const char*)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:70:8: warning: suggest explicit braces to avoid ambiguous ‘else’ [-Wdangling-else]
     if (!checkReportDescriptor (rdesc))
        ^
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp: In member function ‘virtual void HIDPP::DispatcherThread::sendCommandWithoutResponse(HIDPP::Report&)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:108:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
     if (forceLongReports() && report.type() == Report::Short)
     ^~
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:110:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
  _dev.writeReport (report.rawReport ());
  ^~~~
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp: In member function ‘virtual std::unique_ptr<HIDPP::Dispatcher::AsyncReport> HIDPP::DispatcherThread::sendCommand(HIDPP::Report&&)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:115:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
     if (forceLongReports() && report.type() == Report::Short)
     ^~
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:117:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
  std::unique_lock<std::mutex> lock (_command_mutex);
  ^~~
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:121:77: warning: missing initializer for member ‘HIDPP::DispatcherThread::Command::response’ [-Wmissing-field-initializers]
  auto it = _commands.insert (_commands.end (), Command { std::move (report) });
                                                                             ^
[ 13%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Device.cpp.o
[ 14%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Report.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/Report.cpp: In member function ‘std::vector<unsigned char>::iterator HIDPP::Report::parameterBegin()’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/Report.cpp:399:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/Report.cpp: In member function ‘std::vector<unsigned char>::const_iterator HIDPP::Report::parameterBegin() const’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/Report.cpp:411:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
[ 16%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/DeviceInfo.cpp.o
[ 17%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Setting.cpp.o
[ 19%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/SettingLookup.cpp.o
[ 20%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Enum.cpp.o
[ 22%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Address.cpp.o
[ 23%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Profile.cpp.o
[ 25%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Macro.cpp.o
[ 26%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/AbstractProfileFormat.cpp.o
[ 27%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/AbstractMemoryMapping.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/AbstractMemoryMapping.cpp: In member function ‘HIDPP::AbstractMemoryMapping::Page& HIDPP::AbstractMemoryMapping::getPage(HIDPP::Address)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp/AbstractMemoryMapping.cpp:66:46: warning: missing initializer for member ‘HIDPP::AbstractMemoryMapping::Page::data’ [-Wmissing-field-initializers]
   it = _pages.emplace (address, Page { false }).first;
                                              ^
[ 29%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/AbstractMacroFormat.cpp.o
[ 30%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/Device.cpp.o
[ 32%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/Error.cpp.o
[ 33%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/WriteError.cpp.o
[ 35%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/IMemory.cpp.o
[ 36%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/IReceiver.cpp.o
[ 38%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/IIndividualFeatures.cpp.o
[ 39%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/Sensor.cpp.o
[ 41%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/IResolution.cpp.o
[ 42%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/IProfile.cpp.o
[ 44%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/ProfileDirectoryFormat.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp10/ProfileDirectoryFormat.cpp: In member function ‘virtual HIDPP::ProfileDirectory HIDPP10::ProfileDirectoryFormat::read(std::vector<unsigned char>::const_iterator) const’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp10/ProfileDirectoryFormat.cpp:46:55: warning: missing initializer for member ‘HIDPP::ProfileDirectory::Entry::settings’ [-Wmissing-field-initializers]
   dir.entries.push_back ({ Address {0, page, offset} });
                                                       ^
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp10/ProfileDirectoryFormat.cpp: In function ‘std::unique_ptr<HIDPP::AbstractProfileDirectoryFormat> HIDPP10::getProfileDirectoryFormat(HIDPP10::Device*)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp10/ProfileDirectoryFormat.cpp:75:93: warning: unused parameter ‘device’ [-Wunused-parameter]
 std::unique_ptr<AbstractProfileDirectoryFormat> HIDPP10::getProfileDirectoryFormat (Device *device)
                                                                                             ^~~~~~
[ 45%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/ProfileFormat.cpp.o
[ 47%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/ProfileFormatCommon.cpp.o
[ 48%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/ProfileFormatG9.cpp.o
[ 50%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/ProfileFormatG500.cpp.o
[ 51%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/ProfileFormatG700.cpp.o
[ 52%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/MemoryMapping.cpp.o
[ 54%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/RAMMapping.cpp.o
[ 55%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp10/MacroFormat.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp10/MacroFormat.cpp: In function ‘std::unique_ptr<HIDPP::AbstractMacroFormat> HIDPP10::getMacroFormat(HIDPP10::Device*)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp10/MacroFormat.cpp:278:71: warning: unused parameter ‘device’ [-Wunused-parameter]
 std::unique_ptr<AbstractMacroFormat> HIDPP10::getMacroFormat (Device *device)
                                                                       ^~~~~~
[ 57%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/Device.cpp.o
[ 58%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/Error.cpp.o
[ 60%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/UnsupportedFeature.cpp.o
[ 61%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IRoot.cpp.o
[ 63%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/FeatureInterface.cpp.o
[ 64%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IFeatureSet.cpp.o
[ 66%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IOnboardProfiles.cpp.o
[ 67%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IAdjustableDPI.cpp.o
[ 69%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IReprogControls.cpp.o
In file included from /home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/IReprogControls.cpp:19:0:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/IReprogControls.h: In constructor ‘HIDPP20::IReprogControls::IReprogControls(HIDPP20::Device*, uint16_t)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/IReprogControls.h:51:24: warning: ‘HIDPP20::IReprogControls::ID’ will be initialized after [-Wreorder]
         const uint16_t ID;
                        ^~
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/IReprogControls.cpp:28:51: warning:   base ‘HIDPP20::FeatureInterface’ [-Wreorder]
         FeatureInterface (dev, i, "ReprogControls")
                                                   ^
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/IReprogControls.cpp:27:1: warning:   when initialized here [-Wreorder]
 IReprogControls::IReprogControls (Device *dev, uint16_t i): ID (i),
 ^~~~~~~~~~~~~~~
[ 70%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IMouseButtonSpy.cpp.o
[ 72%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/ITouchpadRawXY.cpp.o
[ 73%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/ILEDControl.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/ILEDControl.cpp: In member function ‘HIDPP20::ILEDControl::State HIDPP20::ILEDControl::getState(unsigned int)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/ILEDControl.cpp:73:66: warning: missing initializer for member ‘HIDPP20::ILEDControl::State::<anonymous>’ [-Wmissing-field-initializers]
  State state { static_cast<Mode> (readLE<uint16_t> (results, 1)) };
                                                                  ^
[ 75%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IBatteryLevelStatus.cpp.o
[ 76%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/ISmartShift.cpp.o
[ 77%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IHiresScroll.cpp.o
[ 79%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IReset.cpp.o
[ 80%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/IWirelessDeviceStatus.cpp.o
[ 82%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/ProfileDirectoryFormat.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/ProfileDirectoryFormat.cpp: In function ‘std::unique_ptr<HIDPP::AbstractProfileDirectoryFormat> HIDPP20::getProfileDirectoryFormat(HIDPP20::Device*)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/ProfileDirectoryFormat.cpp:67:102: warning: unused parameter ‘device’ [-Wunused-parameter]
 std::unique_ptr<AbstractProfileDirectoryFormat> HIDPP20::getProfileDirectoryFormat (HIDPP20::Device *device)
                                                                                                      ^~~~~~
[ 83%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/ProfileFormat.cpp.o
[ 85%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/MemoryMapping.cpp.o
[ 86%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp20/MacroFormat.cpp.o
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/MacroFormat.cpp: In function ‘std::unique_ptr<HIDPP::AbstractMacroFormat> HIDPP20::getMacroFormat(HIDPP20::Device*)’:
/home/auser/Programs/logiops/src/logid/hidpp/src/libhidpp/hidpp20/MacroFormat.cpp:214:71: warning: unused parameter ‘device’ [-Wunused-parameter]
 std::unique_ptr<AbstractMacroFormat> HIDPP20::getMacroFormat (Device *device)
                                                                       ^~~~~~
[ 88%] Linking CXX shared library libhidpp.so
[ 88%] Built target hidpp
Scanning dependencies of target logid
[ 89%] Building CXX object src/logid/CMakeFiles/logid.dir/logid.cpp.o
In file included from /home/auser/Programs/logiops/src/logid/Device.h:6:0,
                 from /home/auser/Programs/logiops/src/logid/Actions.h:3,
                 from /home/auser/Programs/logiops/src/logid/util.h:4,
                 from /home/auser/Programs/logiops/src/logid/logid.cpp:12:
/home/auser/Programs/logiops/src/logid/Configuration.h:5:10: fatal error: libconfig.h++: No such file or directory
 #include <libconfig.h++>
          ^~~~~~~~~~~~~~~
compilation terminated.
src/logid/CMakeFiles/logid.dir/build.make:62: recipe for target 'src/logid/CMakeFiles/logid.dir/logid.cpp.o' failed
make[2]: *** [src/logid/CMakeFiles/logid.dir/logid.cpp.o] Error 1
CMakeFiles/Makefile2:87: recipe for target 'src/logid/CMakeFiles/logid.dir/all' failed
make[1]: *** [src/logid/CMakeFiles/logid.dir/all] Error 2
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2

Any assistance you can provide would be greatly appreciated..

Key combinations don't seem to work

I have a section in my configuration that looks like this:

    {
        cid: 0xc3;

        action = 
        {
            type: "Gestures";
            gestures: (
                {
                    direction: "Left";
                    mode: "OnRelease";
                    action = 
                    {
                        type: "Keypress";
                        keys: ["KEY_LEFT", "KEY_LEFTSHIFT", "KEY_LEFTMETA"];
                    };
                },
                {
                    direction: "Right";
                    mode: "OnRelease";
                    action = 
                    {
                        type: "Keypress";
                        keys: ["KEY_RIGHT", "KEY_LEFTSHIFT", "KEY_LEFTMETA"];
                    };
                }
            );
        };
    }

Whenever I do these gestures, it seems like only the first key in the list is "pressed" by logid. Is this intended behavior? I saw that the wiki notes say that the keys section can be a list of multiple keys.

connection issues, MX Master 2S not being found

Hey, great job in providing this driver. I'm getting an intermittent issue finding my device. My logid.cfg in my examples below simply maps NumLock to my gesture button.

I successfully ran this successfully earlier and it located my 2S. Though, it seemed like it would "rediscover" my 2S occasionally (which I think it would make my mouse glitch for a sec).

Then I killed logid. And now I'm 0/5 in getting logid to find my 2S (this is where I guess I might have to restart).

Successful run (with those rediscoveries):

> sudo logid -c /etc/logid.cfg
[INFO] Missing hiresscroll option, not setting.
[INFO] Found Logitech USB Receiver on /dev/hidraw0
[INFO] MX Master 2S detected: device 3 on /dev/hidraw0
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[INFO] Connection established to MX Master 2S
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[INFO] Connection established to MX Master 2S
...

Example failing run (with -v, you can see my 2S -- Device 3)

> sudo logid -c /etc/logid.cfg -v
[INFO] Missing hiresscroll option, not setting.
[INFO] Found Logitech USB Receiver on /dev/hidraw0
[DEBUG] Receiver on /dev/hidraw0: Device 3 paired
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
[ERROR] Time out on default device: /dev/hidraw7 (possibly asleep)
...

Installation problems

Hi @PixlOne!

First of all, many thanks for developing this awesome tool, I'm looking forward to trying it with my new Logitech MX Master! 😉

I have, as far as I know, completed all the steps detailed in the "building" section of the readme, but I can see the following error in my systemctl status page:

dic 07 18:27:25 aitor-XPS-13-7390 systemd[1]: Started Logitech Configuration Daemon.
dic 07 18:27:25 aitor-XPS-13-7390 logid[32651]: /usr/local/bin/logid: error while loading shared libraries: libhidpp.so: cannot open shared object file: No such file or directory
dic 07 18:27:25 aitor-XPS-13-7390 systemd[1]: logid.service: Main process exited, code=exited, status=127/n/a
dic 07 18:27:25 aitor-XPS-13-7390 systemd[1]: logid.service: Failed with result 'exit-code'.

I'm executing the program on my Dell XPS 13 with Ubuntu 18.04 and the OS is new, so I had to install cmake, libevdev-dev, libudev-dev, libconfig-dev and libconfig++-dev (through 'apt install'), but the building and installation process went smoothly. The problem seems to be related with the installation of the 'hidpp' package, isn't it? How should I process?

Thank you for your help and keep up with the good job 👍

Best regards,

Aitor

Multiple devices

I have this scenario: One simple Logitech keyboard and mouse kit, and one mx master 3.
If I have both connected logid outs:

# logid -v
[INFO] Found Logitech USB Receiver on /dev/hidraw2
terminate called without an active exception

So the configuration of mx master 3 is not applied.

If Logitech kit is not connected it outs:

# logid -v
[INFO] Missing hiresscroll option, not setting.
[WARN] No button configuration found, reverting to null config.
[INFO] MX Master 3 detected: device 255 on /dev/hidraw6
[INFO] MX Master 3 detected: device 0 on /dev/hidraw6

And is working as it should

CID of the DPI button of the MX Vertical

Hi, thanks for your awesome project!

I have an MX Vertical mouse and would like to bind the DPI button to Media Pause/Start. Unfortunately, I could not find the CID for the DPI button anywhere.

#3 mentions hidpp-list-devices. However, I could not find it in the repos of Manjaro or Arch. Do I have to build it from source or is it included somewhere with logiops?

Thanks!

OnFewPixels integer field pixels, needs some explanation

I tried to change the pixels field but failed to see any effect.
Also in Configuration.cpp line 412 is:
log_printf(WARN, "Line %d: OnFewPixels requires a 'pixels' field.", gesture_config.getSourceLine());
which suggests that using "OnFewPixels" demands the setting of pixels, which it doesn't.
It's running fine without pixxels set, but I'd like to tweak just that.

KEY for SUPER

Hi,
First, let me say thanks for the great software that you developed :)

I have the Mx Master 3, and I can't find with is the keypress button for the SUPER key
I know this isn't really an issue but can someone tell me?
Thanks

Add option to generate default configuration file

Hi,

Your project is interesting! I would like to configure my MX Master 3.
Can you add an option to logid in order to generate the default configuration skeleton? This should be useful for the first start.

Thanks a lot!

luigi

cannot autostart with systemctl

Hello,
if i run logiops with systemctl start logid it's all fine and work like a charm but if i enable it with systemctl enable logid and restart my pc, i have this issue:

● logid.service - Logitech Configuration Daemon
     Loaded: loaded (/usr/lib/systemd/system/logid.service; enabled; vendor preset: disabled)
     Active: failed (Result: signal) since Sun 2020-04-05 11:31:27 CEST; 33s ago
    Process: 668 ExecStart=/usr/bin/logid (code=killed, signal=ABRT)
   Main PID: 668 (code=killed, signal=ABRT)
apr 05 11:31:19 myself-dell5570 systemd[1]: Started Logitech Configuration Daemon.
apr 05 11:31:26 myself-dell5570 logid[668]: [WARN] Failed to open /dev/hidraw5: open: No such file or directory
apr 05 11:31:26 myself-dell5570 logid[668]: terminate called without an active exception
apr 05 11:31:27 myself-dell5570 systemd[1]: logid.service: Main process exited, code=killed, status=6/ABRT
apr 05 11:31:27 myself-dell5570 systemd[1]: logid.service: Failed with result 'signal'.

logid -v output

[myself@myself-dell5570 ~]$ sudo logid -v
[INFO] Found Logitech USB Receiver on /dev/hidraw3
[DEBUG] Receiver on /dev/hidraw3: Device 1 paired
[INFO] MX Master 3 detected: device 1 on /dev/hidraw3
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)
[DEBUG] Time out on default device: /dev/hidraw5 (possibly asleep)

How can i fix the autostart?
thanks

Allow multiple Actions/types

It would be great if more than one action could be triggered, eg. one button could disable ratcheting mode and enable highres scroll at the same time.

Compile failure on Fedora 32

Trying to compile logiops I get a build failure.

$ rm -rf build;mkdir build;cd build
[lucas@localhost build]$ cmake ..
-- The C compiler identification is GNU 10.0.1
-- The CXX compiler identification is GNU 10.0.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3") 
-- Checking for module 'libevdev'
--   Found libevdev, version 1.9.0
-- Checking for module 'systemd'
--   Found systemd, version 245
-- Checking for module 'libconfig'
--   Found libconfig, version 1.7.2
Could not find libhidpp include dir, getting submodule
-- Checking for module 'libudev'
--   Found libudev, version 245
-- systemd units will be installed at /usr/lib/systemd/system
-- Configuring done
-- Generating done
-- Build files have been written to: /home/lucas/github/logiops/build

And then running make

$ make
Scanning dependencies of target hidpp
[  1%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/misc/Log.cpp.o
[  2%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/misc/CRC.cpp.o
[  4%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hid/RawDevice_linux.cpp.o
[  5%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hid/DeviceMonitor_linux.cpp.o
[  7%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hid/UsageStrings.cpp.o
[  8%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Dispatcher.cpp.o
[ 10%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/SimpleDispatcher.cpp.o
[ 11%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/DispatcherThread.cpp.o
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp: In constructor ‘HIDPP::DispatcherThread::DispatcherThread(const char*)’:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:70:8: warning: suggest explicit braces to avoid ambiguous ‘else’ [-Wdangling-else]
   70 |     if (!checkReportDescriptor (rdesc))
      |        ^
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp: In member function ‘virtual void HIDPP::DispatcherThread::sendCommandWithoutResponse(HIDPP::Report&)’:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:108:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
  108 |     if (forceLongReports() && report.type() == Report::Short)
      |     ^~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:110:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
  110 |  _dev.writeReport (report.rawReport ());
      |  ^~~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp: In member function ‘virtual std::unique_ptr<HIDPP::Dispatcher::AsyncReport> HIDPP::DispatcherThread::sendCommand(HIDPP::Report&&)’:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:115:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
  115 |     if (forceLongReports() && report.type() == Report::Short)
      |     ^~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:117:2: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
  117 |  std::unique_lock<std::mutex> lock (_command_mutex);
      |  ^~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/DispatcherThread.cpp:121:77: warning: missing initializer for member ‘HIDPP::DispatcherThread::Command::response’ [-Wmissing-field-initializers]
  121 |  auto it = _commands.insert (_commands.end (), Command { std::move (report) });
      |                                                                             ^
[ 13%] Building CXX object src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Device.cpp.o
In file included from /home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:19:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.h:46:8: error: ‘string’ in namespace ‘std’ does not name a type
   46 |   std::string _msg;
      |        ^~~~~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.h:25:1: note: ‘std::string’ is defined in header ‘<string>’; did you forget to ‘#include <string>’?
   24 | #include <tuple>
  +++ |+#include <string>
   25 | 
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.h:83:7: error: ‘string’ in namespace ‘std’ does not name a type
   83 |  std::string name () const;
      |       ^~~~~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.h:83:2: note: ‘std::string’ is defined in header ‘<string>’; did you forget to ‘#include <string>’?
   83 |  std::string name () const;
      |  ^~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.h:105:7: error: ‘string’ in namespace ‘std’ does not name a type
  105 |  std::string _name;
      |       ^~~~~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.h:105:2: note: ‘std::string’ is defined in header ‘<string>’; did you forget to ‘#include <string>’?
  105 |  std::string _name;
      |  ^~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp: In constructor ‘HIDPP::Device::InvalidProtocolVersion::InvalidProtocolVersion(const std::tuple<unsigned int, unsigned int>&)’:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:38:2: error: ‘_msg’ was not declared in this scope
   38 |  _msg = ss.str ();
      |  ^~~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp: In member function ‘virtual const char* HIDPP::Device::InvalidProtocolVersion::what() const’:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:43:9: error: ‘_msg’ was not declared in this scope
   43 |  return _msg.c_str ();
      |         ^~~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp: In constructor ‘HIDPP::Device::Device(HIDPP::Dispatcher*, HIDPP::DeviceIndex)’:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:61:4: error: ‘_name’ was not declared in this scope; did you mean ‘rename’?
   61 |    _name = ireceiver.getDeviceName (device_index - 1);
      |    ^~~~~
      |    rename
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:75:3: error: ‘_name’ was not declared in this scope; did you mean ‘rename’?
   75 |   _name = _dispatcher->name ();
      |   ^~~~~
      |   rename
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp: At global scope:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:113:13: error: no declaration matches ‘std::string HIDPP::Device::name() const’
  113 | std::string Device::name () const
      |             ^~~~~~
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:113:13: note: no functions named ‘std::string HIDPP::Device::name() const’
In file included from /home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.cpp:19:
/home/lucas/github/logiops/src/logid/hidpp/src/libhidpp/hidpp/Device.h:36:7: note: ‘class HIDPP::Device’ defined here
   36 | class Device
      |       ^~~~~~
make[2]: *** [src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/build.make:187: src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/hidpp/Device.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:161: src/logid/hidpp/src/libhidpp/CMakeFiles/hidpp.dir/all] Error 2
make: *** [Makefile:150: all] Error 2

/etc/logid.cfg not found

----- $systemctl status logid --------
● logid.service - Logitech Configuration Daemon
Loaded: loaded (/usr/lib/systemd/system/logid.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2020-04-10 10:13:27 CDT; 3s ago
Main PID: 4447 (logid)
Tasks: 3 (limit: 38408)
Memory: 1.4M
CGroup: /system.slice/logid.service
└─4447 /usr/bin/logid

Apr 10 10:13:27 helios systemd[1]: Started Logitech Configuration Daemon.
Apr 10 10:13:27 helios logid[4447]: [WARN] No button configuration found, reverting to null config.

-------- $ ls /etc/ | grep logi -----------
logid.cfg
login.defs

Enable Logid On Boot

Hello and thank you for your time working on this project, I appreciate it.

I'm having issues when enabling logid.service on boot. I am running on Arch Linux. It functions as expected when I manually start it after logging in. For example:

systemctl start logid

Enabling the Service

Expected

Running systemctl enable logid will cause logid to start at boot successfully.

Result

$ sudo systemctl enable logid
Created symlink /etc/systemd/system/multi-user.target.wants/logid.service → /usr/lib/systemd/system/logid.service.
$ sudo reboot

After enabling the service and rebooting, journalctl shows a systemd-coredump along with the following:

logid.service: Main process exited, code=killed, status=6/ABRT
logid.service: Failed with result 'signal'.
SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=logid comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=failed'

Enabling the Service (--user)

I have also tried enabling logid as a user service with the following contents

~/.config/systemd/user/logid.service

[Unit]
Description=Logitech Configuration Daemon

[Service]
Type=simple
ExecStart=/usr/bin/logid
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=default.target

Expected

Running systemctl --user enable logid will cause logid to start at user login successfully.

Result

$ systemctl --user enable logid                                                                                                                                                                            
Created symlink /home/noahmccle/.config/systemd/user/default.target.wants/logid.service → /home/noahmccle/.config/systemd/user/logid.service.
$ sudo reboot

After enabling the user service and rebooting, journalctl --user shows the following:

[ERROR] Could not create evdev device: Permission denied
logid.service: Main process exited, code=exited, status=1/FAILURE
logid.service: Failed with result 'exit-code'.

Forgive me if I am missing something. I am happy to help debug and try to solve the issue if others are also experiencing this. Thank you for your time.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.