Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • S Solaar
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 10
    • Issues 10
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 2
    • Merge requests 2
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • pwr-Solaar
  • Solaar
  • Issues
  • #2013
Closed
Open
Issue created Mar 07, 2023 by Administrator@rootContributor

Unable to use solaar cli commands when the device is connected through bluetooth

Created by: IgorSamurovic

I want to use solaar cli to change host to another machine, like so:

solaar config "MX Keys Mini" change-host 3
solaar config "MX Anywhere" change-host 3

However, this only works if those devices are connected through the dongle. If they are connected through bluetooth, I am unable to do this and am getting this error:

igor@igor-pc:~/Documents/Scripts$ solaar config "MX Anywhere 3" change-host 3
solaar: error: Traceback (most recent call last):
  File "/usr/share/solaar/lib/solaar/cli/__init__.py", line 204, in run
    m.run(c, args, _find_receiver, _find_device)
  File "/usr/share/solaar/lib/solaar/cli/config.py", line 124, in run
    raise Exception("no online device found matching '%s'" % device_name)
Exception: no online device found matching 'mx anywhere 3'

I tried using other identifiers (like serial number) to make this work, to no avail. Even if the device shows up through solaar show, attempts to run commands fail.

When I use this same functionality through the UI, the host is changed perfectly in 100% of cases, whether the device is connected through usb dongle or bluetooth. Also, worth noting, this happens both with the unifying receiver and bolt, so it does not seem to be receiver-specific. I suspect (as per error) that this would work through CLI, if the CLI utility "knew" about those devices, but it looks like it is unable to find them while the UI application can. I have not gone into code to see how they differ, so I might be shooting in the dark here.

Software info: Solaar: 1.1.1 System: Ubuntu 22.04.2 LTS Architecture: x86_64 Python: 3.10.6 Xorg: 1.21.1.3

Info about devices:

USB and Bluetooth Devices

  1: MX Anywhere 3
     Device path  : /dev/hidraw4
     USB id       : 046d:B025
     Codename     : MX Anywhere 3
     Kind         : mouse
     Protocol     : HID++ 4.5
     Serial number: ?
     Model ID:      B02540900000
     Unit ID:       89BDFCBF
        Bootloader: BL1 13.01.B0015
          Firmware: MPM 24.01.B0015
             Other: 
     Supports 31 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
            Firmware: Bootloader BL1 13.01.B0015 0000AACD8D78
            Firmware: Firmware MPM 24.01.B0015 B025AACD8D78
            Firmware: Other   
            Unit ID: 89BDFCBF  Model ID: B02540900000  Transport IDs: {'btleid': 'B025', 'wpid': '4090'}
         3: DEVICE NAME            {0005}   
            Name: MX Anywhere 3
            Kind: mouse
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: RESET                  {0020}   
         6: CRYPTO ID              {0021}   
         7: DEVICE FRIENDLY NAME   {0007}   
            Friendly Name: MX Anywhere 3
         8: UNIFIED BATTERY        {1004}   
         9: REPROG CONTROLS V4     {1B04}   
            Key/Button Actions (saved): {'196': 82, '80': 80, '81': 81, '82': 196, '83': 83, '86': 86}
            Key/Button Actions        : {'80': 80, '81': 81, '82': 196, '83': 83, '86': 86, '196': 82}
            Key/Button Diversion (saved): {'196': 0, '82': 0, '83': 1, '86': 1}
            Key/Button Diversion        : {'82': 0, '83': 1, '86': 1, '196': 0}
        10: CHANGE HOST            {1814}   
            Change Host        : 2:igor-pc
        11: XY STATS               {2250}   
        12: ADJUSTABLE DPI         {2201}   
            Sensitivity (DPI) (saved): 4000
            Sensitivity (DPI)        : 4000
        13: SMART SHIFT ENHANCED   {2111}   
            Scroll Wheel Rachet (saved): 50
            Scroll Wheel Rachet        : 50
        14: HIRES WHEEL            {2121}   
            Multiplier: 15
            Has invert: Normal wheel motion
            Has ratchet switch: Normal wheel mode
            Low resolution mode
            HID notification
            Scroll Wheel Direction (saved): False
            Scroll Wheel Direction        : False
            Scroll Wheel Resolution (saved): False
            Scroll Wheel Resolution        : False
        15: WHEEL STATS            {2251}   
        16: DFUCONTROL SIGNED      {00C2}   
        17: DEVICE RESET           {1802}   internal, hidden
        18: unknown:1803           {1803}   internal, hidden
        19: CONFIG DEVICE PROPS    {1806}   internal, hidden
        20: unknown:1812           {1812}   internal, hidden
        21: OOBSTATE               {1805}   internal, hidden
        22: unknown:1830           {1830}   internal, hidden
        23: unknown:18A1           {18A1}   internal, hidden
        24: unknown:1E00           {1E00}   hidden
        25: unknown:1EB0           {1EB0}   internal, hidden
        26: unknown:1861           {1861}   internal, hidden
        27: unknown:9300           {9300}   internal, hidden
        28: unknown:9001           {9001}   internal, hidden
        29: unknown:1E22           {1E22}   internal, hidden
        30: unknown:9205           {9205}   internal, hidden
     Has 7 reprogrammable keys:
         0: Left Button               , default: Left Click                  => Left Click                
             mse, analytics key events, pos:0, group:1, group mask:g1
             reporting: default
         1: Right Button              , default: Right Click                 => Right Click               
             mse, analytics key events, pos:0, group:1, group mask:g1
             reporting: default
         2: Middle Button             , default: Mouse Middle Button         => Smart Shift               
             mse, reprogrammable, divertable, raw XY, analytics key events, pos:0, group:2, group mask:g1,g2
             reporting: default
         3: Back Button               , default: Mouse Back Button           => Mouse Back Button         
             mse, reprogrammable, divertable, raw XY, analytics key events, unknown:000800, pos:0, group:2, group mask:g1,g2
             reporting: diverted
         4: Forward Button            , default: Mouse Forward Button        => Mouse Forward Button      
             mse, reprogrammable, divertable, raw XY, analytics key events, unknown:000800, pos:0, group:2, group mask:g1,g2
             reporting: diverted
         5: Smart Shift               , default: Smart Shift                 => Mouse Middle Button       
             mse, reprogrammable, divertable, raw XY, analytics key events, pos:0, group:2, group mask:g1,g2
             reporting: default
         6: Virtual Gesture Button    , default: Virtual Gesture Button      => Virtual Gesture Button    
             divertable, virtual, raw XY, force raw XY, pos:0, group:3, group mask:empty
             reporting: default
     Battery: 50%, discharging.

  2: MX Keys Mini
     Device path  : /dev/hidraw14
     USB id       : 046d:B369
     Codename     : MX Keys Mini
     Kind         : ?
     Protocol     : HID++ 4.5
     Serial number: ?
     Model ID:      B36900000000
     Unit ID:       E08AE7C9
        Bootloader: BL1 53.00.B0004
          Firmware: RBK 73.00.B0004
             Other: 
     Supports 32 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
            Firmware: Bootloader BL1 53.00.B0004 B369CF1E27F2
            Firmware: Firmware RBK 73.00.B0004 B369CF1E27F2
            Firmware: Other   
            Unit ID: E08AE7C9  Model ID: B36900000000  Transport IDs: {'btleid': 'B369'}
         3: DEVICE NAME            {0005}   
            Name: MX Keys Mini
            Kind: keyboard
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: RESET                  {0020}   
         6: DEVICE FRIENDLY NAME   {0007}   
            Friendly Name: MX Keys Mini
         7: UNIFIED BATTERY        {1004}   
         8: REPROG CONTROLS V4     {1B04}   
            Key/Button Diversion (saved): {'226': 0, '227': 0, '229': 0, '231': 0, '232': 0, '233': 0, '259': 0, '264': 0, '266': 0, '279': 0, '284': 0}
            Key/Button Diversion        : {'226': 0, '227': 0, '259': 0, '264': 0, '266': 0, '284': 0, '229': 0, '231': 0, '232': 0, '233': 0, '279': 0}
         9: CHANGE HOST            {1814}   
            Change Host        : 2:igor-pc
        10: HOSTS INFO             {1815}   
            Host 0 (paired): igor-pc
            Host 1 (paired): igor-pc
            Host 2 (paired): DTDLU555
        11: BACKLIGHT2             {1982}   
            Backlight (saved): False
            Backlight        : False
        12: K375S FN INVERSION     {40A3}   
            Swap Fx function (saved): True
            Swap Fx function        : True
        13: LOCK KEY STATE         {4220}   
        14: KEYBOARD DISABLE KEYS  {4521}   
            Disable keys (saved): {'1': False, '16': False, '8': False}
            Disable keys        : {'1': False, '8': False, '16': False}
        15: MULTIPLATFORM          {4531}   
            Set OS (saved): 3
            Set OS        : Android
        16: unknown:00C3           {00C3}   
        17: DEVICE RESET           {1802}   internal, hidden, unknown:000010
        18: unknown:1803           {1803}   internal, hidden, unknown:000010
        19: CONFIG DEVICE PROPS    {1806}   internal, hidden, unknown:000010
        20: unknown:1816           {1816}   internal, hidden, unknown:000010
        21: OOBSTATE               {1805}   internal, hidden
        22: unknown:1830           {1830}   internal, hidden, unknown:000010
        23: unknown:1891           {1891}   internal, hidden, unknown:000008
        24: unknown:18A1           {18A1}   internal, hidden, unknown:000010
        25: unknown:1E00           {1E00}   hidden
        26: unknown:1E02           {1E02}   internal, hidden
        27: unknown:1602           {1602}   
        28: unknown:1EB0           {1EB0}   internal, hidden, unknown:000010
        29: unknown:1861           {1861}   internal, hidden, unknown:000010
        30: unknown:1A20           {1A20}   internal, hidden, unknown:000010
        31: unknown:18B0           {18B0}   internal, hidden, unknown:000010
     Has 16 reprogrammable keys:
         0: Host Switch Channel 1     , default: HostSwitch Channel 1        => HostSwitch Channel 1      
             is FN, FN sensitive, analytics key events, pos:1, group:0, group mask:empty
             reporting: default
         1: Host Switch Channel 2     , default: HostSwitch Channel 2        => HostSwitch Channel 2      
             is FN, FN sensitive, analytics key events, pos:2, group:0, group mask:empty
             reporting: default
         2: Host Switch Channel 3     , default: HostSwitch Channel 3        => HostSwitch Channel 3      
             is FN, FN sensitive, analytics key events, pos:3, group:0, group mask:empty
             reporting: default
         3: Backlight Down            , default: Backlight Down              => Backlight Down            
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:4, group:0, group mask:empty
             reporting: default
         4: Backlight Up              , default: Backlight Up                => Backlight Up              
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:5, group:0, group mask:empty
             reporting: default
         5: Show Desktop Fn           , default: unknown:00D8                => unknown:00D8              
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:6, group:0, group mask:empty
             reporting: default
         6: Backlight Down Fn         , default: LedToggle                   => LedToggle                 
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:7, group:0, group mask:empty
             reporting: default
         7: Screenshot                , default: unknown:00DF                => unknown:00DF              
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:8, group:0, group mask:empty
             reporting: default
         8: Backlight Up Fn           , default: unknown:00F1                => unknown:00F1              
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:9, group:0, group mask:empty
             reporting: default
         9: Play/Pause Fn             , default: Play/Pause                  => Play/Pause                
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:10, group:0, group mask:empty
             reporting: default
        10: Mute Fn                   , default: Mute                        => Mute                      
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:11, group:0, group mask:empty
             reporting: default
        11: Volume Down Fn            , default: Volume Down                 => Volume Down               
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:12, group:0, group mask:empty
             reporting: default
        12: Volume Up Fn              , default: Volume Up                   => Volume Up                 
             nonstandard, reprogrammable, divertable, analytics key events, pos:13, group:0, group mask:empty
             reporting: default
        13: Lock Fn                   , default: unknown:00EC                => unknown:00EC              
             nonstandard, reprogrammable, divertable, analytics key events, pos:14, group:0, group mask:empty
             reporting: default
        14: F Lock                    , default: Do Nothing One              => Do Nothing One            
             is FN, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        15: unknown:0034              , default: Do Nothing One              => Do Nothing One            
             nonstandard, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
     Battery: 85%, discharging.

Upgraded to 1.1.8, now I am getting this error:

Setting change-host of MX Keys Mini to 3:
solaar: error: Traceback (most recent call last):
  File "/usr/share/solaar/lib/solaar/cli/__init__.py", line 209, in run
    m.run(c, args, _find_receiver, _find_device)
  File "/usr/share/solaar/lib/solaar/cli/config.py", line 150, in run
    for dev in find_device(receivers, device_name):
  File "/usr/share/solaar/lib/solaar/cli/__init__.py", line 170, in _find_device
    for dev in r:
  File "/usr/share/solaar/lib/logitech_receiver/receiver.py", line 297, in __iter__
    dev = self.__getitem__(number)
  File "/usr/share/solaar/lib/logitech_receiver/receiver.py", line 314, in __getitem__
    return self.register_new_device(key)
  File "/usr/share/solaar/lib/logitech_receiver/receiver.py", line 241, in register_new_device
    dev = Device(self, number, notification)
  File "/usr/share/solaar/lib/logitech_receiver/device.py", line 100, in __init__
    self.path = _hid.find_paired_node(receiver.path, number, 1) if receiver else info.path
  File "/usr/share/solaar/lib/hidapi/udev.py", line 208, in find_paired_node
    dev_phys = dev.find_parent('hid').get('HID_PHYS')
AttributeError: 'NoneType' object has no attribute 'get'

I should mention that the keyboard's host is now changed! However now running two quick commands in a succession doesn't work, so it only moves the keyboard and not the mouse, will be doing some research on that once I have some time.

Assignee
Assign to
Time tracking