Solaar: Support Bluetooth mice

Created on 29 Apr 2016  路  33Comments  路  Source: pwr-Solaar/Solaar

Some mice such as the MX Master support connecting over Bluetooth, which works really well and reduces the number of receivers one needs to buy.

Unfortunately, Solaar does not support this at all. Could this be added? Do these mice even speak anything but regular HID over Bluetooth?

enhancement

Most helpful comment

+1

Having only 2 USBs in my laptop makes using the receiver a real pain. I hope this could be implemented!

All 33 comments

HID++ also supports Bluetooth as transport AFAIK. I don't have the time/devices to test with, so if someone is interested feel free to tackle this.

+1

Having only 2 USBs in my laptop makes using the receiver a real pain. I hope this could be implemented!

+1

+1, with the democratization of the USB-C this is the only option in order to run the app !

The MX master gets picked up as regular HID. According to https://github.com/libratbag/libratbag/issues/596#issuecomment-468660679, even the interface is identical.

Just out of curiosity, my use case is that I just want to use Bluetooth with my MX Master 2S instead of the dongle, but in Linux, the DPI is so low, it's painful to use. Does the above indicate that there is someway to jack up the DPI using Solaar, or maybe libratbag?

+1

+1

Just out of curiosity, my use case is that I just want to use Bluetooth with my MX Master 2S instead of the dongle, but in Linux, the DPI is so low, it's painful to use. Does the above indicate that there is someway to jack up the DPI using Solaar, or maybe libratbag?

You can jack up the DPI using ratbag, but it does not persist in the mouse, so after restart of either mouse, or system, you have to apply it again.

It would be awesome to have it. I hope it will be integrated!

@cybercyst Put something like this in your /etc/udev/hwdb.d/71-mouse-mx2s-bt.hwdb and do a systemd-hwdb update && udevadm trigger

# Logitech MX Master 2S (via Bluetooth) has weird resolution in default hwdb.
mouse:bluetooth:v046dpb019:name:MX Master 2S Mouse:
 MOUSE_DPI=1000@125

I have no idea why, but somehow default udev configuration indicates the mouse is 1000 dpi when connected over USB, but 2000 dpi when connected via BT, however when unconfigured by solaar it defaults to 1000 dpi in both modes, I think.

+1

Ok, I have some trouble identifying what is what, but I think this is my MX Master 2S:

looking at device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3/3-2/3-2.1/3-2.1.4/3-2.1.4:1.2/0003:046D:C52B.000B/0003:046D:4069.000C/hidraw/hidraw4':
    KERNEL=="hidraw4"
    SUBSYSTEM=="hidraw"
    DRIVER==""

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3/3-2/3-2.1/3-2.1.4/3-2.1.4:1.2/0003:046D:C52B.000B/0003:046D:4069.000C':
    KERNELS=="0003:046D:4069.000C"
    SUBSYSTEMS=="hid"
    DRIVERS=="logitech-hidpp-device"
    ATTRS{country}=="00"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3/3-2/3-2.1/3-2.1.4/3-2.1.4:1.2/0003:046D:C52B.000B':
    KERNELS=="0003:046D:C52B.000B"
    SUBSYSTEMS=="hid"
    DRIVERS=="logitech-djreceiver"
    ATTRS{country}=="00"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3/3-2/3-2.1/3-2.1.4/3-2.1.4:1.2':
    KERNELS=="3-2.1.4:1.2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usbhid"
    ATTRS{bInterfaceProtocol}=="00"
    ATTRS{authorized}=="1"
    ATTRS{bInterfaceNumber}=="02"
    ATTRS{bNumEndpoints}=="01"
    ATTRS{supports_autosuspend}=="1"
    ATTRS{bInterfaceClass}=="03"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bInterfaceSubClass}=="00"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3/3-2/3-2.1/3-2.1.4':
    KERNELS=="3-2.1.4"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{maxchild}=="0"
    ATTRS{devpath}=="2.1.4"
    ATTRS{bcdDevice}=="2411"
    ATTRS{bMaxPacketSize0}=="32"
    ATTRS{idProduct}=="c52b"
    ATTRS{authorized}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{version}==" 2.00"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{manufacturer}=="Logitech"
    ATTRS{busnum}=="3"
    ATTRS{configuration}=="RQR24.11_B0036"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{idVendor}=="046d"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{speed}=="12"
    ATTRS{bNumInterfaces}==" 3"
    ATTRS{devnum}=="10"
    ATTRS{tx_lanes}=="1"
    ATTRS{product}=="USB Receiver"
    ATTRS{removable}=="unknown"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bmAttributes}=="a0"
    ATTRS{urbnum}=="49465"
    ATTRS{rx_lanes}=="1"
    ATTRS{quirks}=="0x0"
    ATTRS{bMaxPower}=="98mA"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3/3-2/3-2.1':
    KERNELS=="3-2.1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{devnum}=="3"
    ATTRS{tx_lanes}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{busnum}=="3"
    ATTRS{manufacturer}=="VIA Labs, Inc.         "
    ATTRS{bcdDevice}=="5113"
    ATTRS{bmAttributes}=="e0"
    ATTRS{authorized}=="1"
    ATTRS{removable}=="unknown"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{devpath}=="2.1"
    ATTRS{ltm_capable}=="no"
    ATTRS{quirks}=="0x0"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{idProduct}=="3080"
    ATTRS{rx_lanes}=="1"
    ATTRS{maxchild}=="5"
    ATTRS{urbnum}=="120"
    ATTRS{speed}=="480"
    ATTRS{configuration}==""
    ATTRS{product}=="USB2.0 Hub             "
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{version}==" 2.10"
    ATTRS{idVendor}=="17ef"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3/3-2':
    KERNELS=="3-2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{maxchild}=="5"
    ATTRS{bDeviceClass}=="09"
    ATTRS{removable}=="unknown"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{devnum}=="2"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{rx_lanes}=="1"
    ATTRS{urbnum}=="61"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{bmAttributes}=="e0"
    ATTRS{idProduct}=="3080"
    ATTRS{tx_lanes}=="1"
    ATTRS{ltm_capable}=="no"
    ATTRS{product}=="USB2.0 Hub             "
    ATTRS{idVendor}=="17ef"
    ATTRS{authorized}=="1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{busnum}=="3"
    ATTRS{version}==" 2.10"
    ATTRS{configuration}==""
    ATTRS{devpath}=="2"
    ATTRS{speed}=="480"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bcdDevice}=="5113"
    ATTRS{manufacturer}=="VIA Labs, Inc.         "
    ATTRS{quirks}=="0x0"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0/usb3':
    KERNELS=="usb3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{idVendor}=="1d6b"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{devpath}=="0"
    ATTRS{authorized_default}=="1"
    ATTRS{urbnum}=="24"
    ATTRS{rx_lanes}=="1"
    ATTRS{interface_authorized_default}=="1"
    ATTRS{serial}=="0000:3c:00.0"
    ATTRS{bDeviceProtocol}=="01"
    ATTRS{bMaxPower}=="0mA"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{busnum}=="3"
    ATTRS{bcdDevice}=="0504"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{maxchild}=="2"
    ATTRS{devnum}=="1"
    ATTRS{idProduct}=="0002"
    ATTRS{manufacturer}=="Linux 5.4.0-42-generic xhci-hcd"
    ATTRS{quirks}=="0x0"
    ATTRS{bDeviceClass}=="09"
    ATTRS{version}==" 2.00"
    ATTRS{tx_lanes}=="1"
    ATTRS{removable}=="unknown"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{ltm_capable}=="no"
    ATTRS{speed}=="480"
    ATTRS{product}=="xHCI Host Controller"
    ATTRS{authorized}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0/0000:3c:00.0':
    KERNELS=="0000:3c:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="xhci_hcd"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{dbc}=="disabled"
    ATTRS{device}=="0x15ec"
    ATTRS{consistent_dma_mask_bits}=="64"
    ATTRS{msi_bus}=="1"
    ATTRS{driver_override}=="(null)"
    ATTRS{local_cpus}=="ff"
    ATTRS{current_link_width}=="4"
    ATTRS{max_link_width}=="4"
    ATTRS{numa_node}=="-1"
    ATTRS{max_link_speed}=="8 GT/s"
    ATTRS{enable}=="1"
    ATTRS{vendor}=="0x8086"
    ATTRS{class}=="0x0c0330"
    ATTRS{current_link_speed}=="2.5 GT/s"
    ATTRS{subsystem_vendor}=="0x8086"
    ATTRS{ari_enabled}=="0"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{broken_parity_status}=="0"
    ATTRS{irq}=="163"
    ATTRS{revision}=="0x06"
    ATTRS{dma_mask_bits}=="64"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0/0000:3b:02.0':
    KERNELS=="0000:3b:02.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{max_link_width}=="4"
    ATTRS{local_cpus}=="ff"
    ATTRS{irq}=="161"
    ATTRS{max_link_speed}=="8 GT/s"
    ATTRS{vendor}=="0x8086"
    ATTRS{revision}=="0x06"
    ATTRS{enable}=="1"
    ATTRS{current_link_speed}=="2.5 GT/s"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{subsystem_vendor}=="0x8086"
    ATTRS{msi_bus}=="1"
    ATTRS{numa_node}=="-1"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{current_link_width}=="4"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{device}=="0x15ef"
    ATTRS{secondary_bus_number}=="60"
    ATTRS{driver_override}=="(null)"
    ATTRS{subordinate_bus_number}=="60"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{ari_enabled}=="0"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{class}=="0x060400"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0/0000:3a:00.0':
    KERNELS=="0000:3a:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{revision}=="0x06"
    ATTRS{current_link_width}=="4"
    ATTRS{broken_parity_status}=="0"
    ATTRS{max_link_width}=="4"
    ATTRS{device}=="0x15ef"
    ATTRS{secondary_bus_number}=="59"
    ATTRS{subordinate_bus_number}=="109"
    ATTRS{subsystem_vendor}=="0x8086"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{subsystem_device}=="0x0000"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{irq}=="16"
    ATTRS{driver_override}=="(null)"
    ATTRS{numa_node}=="-1"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{enable}=="1"
    ATTRS{current_link_speed}=="2.5 GT/s"
    ATTRS{vendor}=="0x8086"
    ATTRS{msi_bus}=="1"
    ATTRS{class}=="0x060400"
    ATTRS{ari_enabled}=="0"
    ATTRS{max_link_speed}=="8 GT/s"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{local_cpus}=="ff"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0/0000:04:04.0':
    KERNELS=="0000:04:04.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{revision}=="0x02"
    ATTRS{local_cpus}=="ff"
    ATTRS{class}=="0x060400"
    ATTRS{irq}=="144"
    ATTRS{numa_node}=="-1"
    ATTRS{max_link_width}=="4"
    ATTRS{broken_parity_status}=="0"
    ATTRS{current_link_width}=="4"
    ATTRS{max_link_speed}=="8 GT/s"
    ATTRS{ari_enabled}=="0"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{enable}=="1"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{vendor}=="0x8086"
    ATTRS{subordinate_bus_number}=="109"
    ATTRS{driver_override}=="(null)"
    ATTRS{device}=="0x15d3"
    ATTRS{secondary_bus_number}=="58"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{msi_bus}=="1"
    ATTRS{subsystem_vendor}=="0x1028"
    ATTRS{subsystem_device}=="0x07e6"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{current_link_speed}=="2.5 GT/s"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4/0000:03:00.0':
    KERNELS=="0000:03:00.0"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{subsystem_vendor}=="0x1028"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{numa_node}=="-1"
    ATTRS{msi_bus}=="1"
    ATTRS{device}=="0x15d3"
    ATTRS{local_cpus}=="ff"
    ATTRS{subsystem_device}=="0x07e6"
    ATTRS{current_link_width}=="4"
    ATTRS{class}=="0x060400"
    ATTRS{max_link_speed}=="8 GT/s"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{max_link_width}=="4"
    ATTRS{broken_parity_status}=="0"
    ATTRS{ari_enabled}=="0"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{secondary_bus_number}=="4"
    ATTRS{irq}=="16"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{subordinate_bus_number}=="109"
    ATTRS{enable}=="1"
    ATTRS{revision}=="0x02"
    ATTRS{vendor}=="0x8086"
    ATTRS{current_link_speed}=="8 GT/s"

  looking at parent device '/devices/pci0000:00/0000:00:1c.4':
    KERNELS=="0000:00:1c.4"
    SUBSYSTEMS=="pci"
    DRIVERS=="pcieport"
    ATTRS{class}=="0x060400"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{driver_override}=="(null)"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{subsystem_device}=="0x07e6"
    ATTRS{device}=="0x9d14"
    ATTRS{d3cold_allowed}=="1"
    ATTRS{subsystem_vendor}=="0x1028"
    ATTRS{local_cpus}=="ff"
    ATTRS{secondary_bus_number}=="3"
    ATTRS{revision}=="0xf1"
    ATTRS{vendor}=="0x8086"
    ATTRS{irq}=="124"
    ATTRS{subordinate_bus_number}=="109"
    ATTRS{numa_node}=="-1"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{max_link_width}=="4"
    ATTRS{aer_rootport_total_err_cor}=="0"
    ATTRS{current_link_speed}=="8 GT/s"
    ATTRS{ari_enabled}=="0"
    ATTRS{aer_rootport_total_err_fatal}=="0"
    ATTRS{current_link_width}=="4"
    ATTRS{msi_bus}=="1"
    ATTRS{max_link_speed}=="8 GT/s"
    ATTRS{aer_rootport_total_err_nonfatal}=="0"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Here is my original MX Master:

[239255.200391] logitech-hidpp-device 0005:046D:B012.0006: HID++ 4.5 device connected.
[239255.639080] input: Logitech Wireless Mouse MX Master as /devices/virtual/misc/uhid/0005:046D:B012.0006/input/input40
[239255.639265] logitech-hidpp-device 0005:046D:B012.0006: input,hidraw3: BLUETOOTH HID v0.14 Keyboard [Logitech Wireless Mouse MX Master] on E4:A7:A0:C4:C3:B2

  looking at device '/devices/virtual/misc/uhid/0005:046D:B012.0006/hidraw/hidraw3':
    KERNEL=="hidraw3"
    SUBSYSTEM=="hidraw"
    DRIVER==""
    ATTR{power/async}=="disabled"
    ATTR{power/control}=="auto"
    ATTR{power/runtime_active_kids}=="0"
    ATTR{power/runtime_active_time}=="0"
    ATTR{power/runtime_enabled}=="disabled"
    ATTR{power/runtime_status}=="unsupported"
    ATTR{power/runtime_suspended_time}=="0"
    ATTR{power/runtime_usage}=="0"

  looking at parent device '/devices/virtual/misc/uhid/0005:046D:B012.0006':
    KERNELS=="0005:046D:B012.0006"
    SUBSYSTEMS=="hid"
    DRIVERS=="logitech-hidpp-device"
    ATTRS{country}=="00"
    ATTRS{power/async}=="enabled"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_kids}=="0"
    ATTRS{power/runtime_active_time}=="0"
    ATTRS{power/runtime_enabled}=="disabled"
    ATTRS{power/runtime_status}=="unsupported"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/runtime_usage}=="0"

  looking at parent device '/devices/virtual/misc/uhid':
    KERNELS=="uhid"
    SUBSYSTEMS=="misc"
    DRIVERS==""
    ATTRS{power/async}=="disabled"
    ATTRS{power/control}=="auto"
    ATTRS{power/runtime_active_kids}=="0"
    ATTRS{power/runtime_active_time}=="0"
    ATTRS{power/runtime_enabled}=="disabled"
    ATTRS{power/runtime_status}=="unsupported"
    ATTRS{power/runtime_suspended_time}=="0"
    ATTRS{power/runtime_usage}=="0"

@lechum2
I'm not sure whether this is the bluetooth connection. Did you try with your receiver physically disconnected?

@wRAR Is that the entire output? It has a lot less information than is available for USB devices (but I think that a rule could be written based on this information).

@pfps yes. On the other hand, the output is the same even when the mouse is disconnected.

@pfps You're right that was not it. I removed everting and this is what shows up when I connect the mouse over bluetooth:

  looking at device '/devices/virtual/misc/uhid/0005:046D:B019.0014/hidraw/hidraw1':
    KERNEL=="hidraw1"
    SUBSYSTEM=="hidraw"
    DRIVER==""

  looking at parent device '/devices/virtual/misc/uhid/0005:046D:B019.0014':
    KERNELS=="0005:046D:B019.0014"
    SUBSYSTEMS=="hid"
    DRIVERS=="hid-generic"
    ATTRS{country}=="00"

  looking at parent device '/devices/virtual/misc/uhid':
    KERNELS=="uhid"
    SUBSYSTEMS=="misc"
    DRIVERS==""

So now I am sure this is it.

I like the situation that @wRAR is reporting - the device is showing the logitech hidpp driver. I wonder why the output from @lechum2 is only showing a generic hid driver.

@lechum2 Please provide output of solaar show for your mouse. I'm trying to find out what the B019.0014 is.

Here you go:

Unifying Receiver
  Device path  : /dev/hidraw3
  USB id       : 046d:c52b
  Serial       : 37E997E5
    Firmware   : 24.11.B0036
    Bootloader : 02.09
    Other      : AA.AC
  Has 1 paired device(s) out of a maximum of 6.
  Notifications: wireless (0x000100)
  Device activity counters: 1=63

  1: Wireless Mouse MX Master 2S
     Codename     : MX Master 2S
     Kind         : mouse
     Wireless PID : 4069
     Protocol     : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: 2480A051
        Bootloader: BOT 56.01.B0006
          Firmware: MPM 12.01.B0006
          Firmware: MPM 12.01.B0006
             Other: 
     The power switch is located on the base.
     Supports 32 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
         3: DEVICE NAME            {0005}   
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: RESET                  {0020}   
         6: CRYPTO ID              {0021}   
         7: BATTERY STATUS         {1000}   
         8: CONFIG DEVICE PROPS    {1806}   internal, hidden
         9: CHANGE HOST            {1814}   
            Change Host: 2:dx13
        10: REPROG CONTROLS V4     {1B04}   
            Actions: {'80': 80, '81': 81, '82': 82, '83': 83, '86': 86, '195': 195, '196': 196}
        11: ADJUSTABLE DPI         {2201}   
            Sensitivity (DPI): 1200
        12: VERTICAL SCROLLING     {2100}   
            Roller type: 3G
            Ratchet per turn: 24
            Scroll lines: 0
        13: SMART SHIFT            {2110}   
            Smart Shift: 0
        14: HIRES WHEEL            {2121}   
            Multiplier: 8
            Has invert
              Normal wheel motion
            Has ratchet switch
              Free wheel mode
            High resolution mode
            HID notification
            High Resolution Wheel Invert: False
            Wheel Resolution: True
        15: GESTURE 2              {6501}   
        16: DFUCONTROL SIGNED      {00C2}   
        17: unknown:1813           {1813}   internal, hidden
        18: unknown:1830           {1830}   internal, hidden
        19: unknown:1890           {1890}   internal, hidden
        20: unknown:1891           {1891}   internal, hidden
        21: unknown:18A1           {18A1}   internal, hidden
        22: unknown:18C0           {18C0}   internal, hidden
        23: unknown:1DF3           {1DF3}   internal, hidden
        24: unknown:1E00           {1E00}   hidden
        25: unknown:1EB0           {1EB0}   internal, hidden
        26: unknown:1803           {1803}   internal, hidden
        27: unknown:1861           {1861}   internal, hidden
        28: unknown:9001           {9001}   internal, hidden
        29: unknown:9200           {9200}   internal, hidden
        30: unknown:9202           {9202}   internal, hidden
        31: OOBSTATE               {1805}   internal, hidden
     Has 8 reprogrammable keys:
         0: Left Button               , default: Left Click                  => Left Button               
             mse, pos:0, group:1, gmask:1
         1: Right Button              , default: Right Click                 => Right Button              
             mse, pos:0, group:1, gmask:1
         2: Middle Button             , default: Mouse Middle Button         => Middle Button             
             mse, reprogrammable, divertable, pos:0, group:3, gmask:7
         3: Back Button               , default: Mouse Back Button           => Back Button               
             mse, reprogrammable, divertable, pos:0, group:2, gmask:3
         4: Forward Button            , default: Mouse Forward Button        => Forward Button            
             mse, reprogrammable, divertable, pos:0, group:2, gmask:3
         5: App Switch Gesture        , default: Gesture Button Navigation   => App Switch Gesture        
             mse, reprogrammable, divertable, pos:0, group:3, gmask:7
         6: Smart Shift               , default: Smart Shift                 => Smart Shift               
             mse, reprogrammable, divertable, pos:0, group:3, gmask:7
         7: Virtual Gesture Button    , default: Virtual Gesture Button      => Virtual Gesture Button    
             divertable, virtual, pos:0, group:4, gmask:0
     Battery: 50%, discharging, next level 20%.

Thanks. It looks as if the B019 is an identifier for the Bluetooth interface for the device.

Not sure if helps but here is my MX Master 2S w/ bluethooth output:

  looking at device '/devices/virtual/misc/uhid/0005:046D:B019.0009/hidraw/hidraw3':
    KERNEL=="hidraw3"
    SUBSYSTEM=="hidraw"
    DRIVER==""

  looking at parent device '/devices/virtual/misc/uhid/0005:046D:B019.0009':
    KERNELS=="0005:046D:B019.0009"
    SUBSYSTEMS=="hid"
    DRIVERS=="hid-generic"
    ATTRS{country}=="00"

  looking at parent device '/devices/virtual/misc/uhid':
    KERNELS=="uhid"
    SUBSYSTEMS=="misc"
    DRIVERS==""

That is useful as it indicates that the Bluetooth product ID is B019 only. Thanks.

@FFY00 The driver for some of these Logitech Bluetooth mice is hid-generic. Do you know whether HID++ messages can be transported using this driver?

Yes, they can. Some devices can use logitech-hidpp-device and other hid-generic, there is no issue. A hidraw node will still show up in userspace.
Unfortunately, we use hidapi, which defaults to the libusb backend which only supports USB devices, so we would need to talk to the hidraw nodes directly. hidapi is awful anyway IMHO, it leaks the Windows HID API all over and has some very big limitations, as well as a bad design, because of this. I would be 100% in favor of moving to the Linux API (which is hidraw), we don't even need the cross-platform support that hidapi provides, so this is a no brainer.

Bluetooth support should work out of the box (just need to add the IDs) when the wired devices are working as long as your hidapi is using the hidraw backend instead of libusb. Unfortunately, it defaults to libusb, even on Linux, I can't seem to grasp why other than maintainer buy-in from the libusb folks. In arch, I explicitly choose the hidraw backend: https://github.com/archlinux/svntogit-community/blob/25c4668dc82e670f94bd1a7980c67d72f9c96bb7/trunk/PKGBUILD#L32.

The only thing is that Bluetooth devices have a quirk where they don't support short reports (0x10), only long (0x11).

A solution for this would be talking to the hidraw nodes directly. https://github.com/FFY00/python-ioctl should work, but feel free to opt for something else, it's your call. Choosing a backend that provides us with access to the report descriptor would also allows us cleanly handle the Bluetooth quirk.

Or are we opening files directly? That works but we have no access to the report descriptor.

PR #952 adds support for wired devices to the Solaar GUI. It is an important step towards supporting Bluetooth connections in Solaar. If you have an HID++ device that can connect with a USB cable (as opposed to charging using the cable) please test this PR. You do need to install the udev rule. Check in lib/logitech_receiver/base_usb.py to see if your device is given as a WIRED_DEVICE. If not, you could add it and add it to WIRED_DEVICES in the same file and to rules.d/42-logitech-unify-permissions.rules and copy this file to the /etc/udev/rules.d so you can quickly test it. In any case report the USB information about the device in PR #952 so that the USB information about the device can be added to Solaar.

Even if you don't have a wired device it will be worthwhile to test PR #952 to check that the changes have not caused any problems for receiver-connected devices.

To run PR #952, first clone Solaar if you have not already done so and cd to the clone directory. The first time you download the pull request, fetch it into a new branch and checkout that branch, as in:

git fetch origin pull/952/head:pull_952
git checkout pull_952

To download a new version of the pull request, fetch it and then set your pull branch
to the new fetch, as in:

git checkout pull_952
git fetch origin pull/952/head
git reset --hard FETCH_HEAD

Also install the udev rule each time you download a new version:

sudo cp rules.d/42-logitech-unify-permissions.rules /etc/udev/rules.d/42-logitech-unify-permissions.rules 

PR #956 adds support for bluetooth-connected devices. Please give it a try (but there are likely to be problems that still need to be worked out).

Each bluetooth-connected device needs an entry in lib/logitech_receiver/descriptors.py
There are only a few entries there for bluetooth devices. To add a new bluetooth device requires knowing the bluetooth product id for the device. The way I know to do this is to find which hidraw node is for the bluetooth device (either see which hidraw file is added to /dev when the device connects or just try each hidraw file in /dev). Then run udevadm infor /dev/hidrawN where /dev/hidrawN is the node for your device. The bluetooth product id is the four-digit hex number after the 046D. Then add an entry like the one for the MX Master 3 or the MX Vertical to lib/logitech_receiver/descriptors.py

Edit: An easier way to find the Bluetooth ID is to look in your system log for the connection messages, which should look something like (search for 046D in your log):

logitech-hidpp-device 0005:046D:B012.0006: HID++ 4.5 device connected.
input: Logitech Wireless Mouse MX Master as /devices/virtual/misc/uhid/0005:046D:B012.0006/input/input40
logitech-hidpp-device 0005:046D:B012.0006: input,hidraw3: BLUETOOTH HID v0.14 Keyboard [Logitech Wireless Mouse MX Master] on E4:A7:A0:C4:C3:B2

The Bluetooth product ID number is the four hex digits after the 046D.`

If you add a new device, say so in this issue so that it can be added for others.

One thing to specially check for is problems in ~/.config/solaar/config.json

Check before you try out PR #956 to ensure that there is only one entry for each of your devices. If there is more than one you probably should remove them all. When you are running this PR check the file often to ensure that there is still only one entry for each device. This is needed because it is difficult to determine the identity of devices so Solaar now has a complex method for this purpose.

To download and work with Solar

git clone https://github.com/pwr-Solaar/Solaar.git
cd Solaar

Run Solaar as bin/solaar from this directory.

To run PR #956, first clone Solaar if you have not already done so and cd to the clone directory. The first time you download the pull request, fetch it into a new branch and checkout that branch, as in:

git fetch origin pull/956/head:pull_956
git checkout pull_956

To download a new version of the pull request, fetch it and then set your pull branch
to the new fetch, as in:

git checkout pull_956
git fetch origin pull/956/head
git reset --hard FETCH_HEAD

@cybercyst @lechum2 @onidlo @wRAR W@Xplouder PR #956 is looking good but could really use some more testing.

Along with installing PR #956 you will need to install the udev rule, kick udev, and re-attach your devices. (Or run Solaar as root.)

So

sudo cp rules.d/42-logitech-unify-permissions.rules /etc/udev/rules.d
sudo udevadm control --reload-rules

and then disconnect and reconnect your bluetooth devices.

PR #968 adds support for USB-connected and Bluetooth devices that are unknown to Solaar. If you have a Logitech device that connects via a USB cable or via Bluetooth please try out this PR.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

notaduck picture notaduck  路  15Comments

mfraser picture mfraser  路  9Comments

meson11 picture meson11  路  5Comments

digulla picture digulla  路  10Comments

fdev31 picture fdev31  路  9Comments