Repository: pwr-Solaar/Solaar

Issue:
Swap Fx doesnt apply any changes to F-keys behavior on MX Keys S
**Information**
<!-- Make sure that your issue is not one of the known issues in the Solaar documentation at https://pwr-solaar.github.io/Solaar/ -->
<!-- Do not bother opening an issue for a version older than 1.1.8.  Upgrade to the latest version and see if your issue persists. -->
<!-- If you are not running the current version of Solaar, strongly consider upgrading to the newest version. -->
- Solaar version (`solaar --version` or `git describe --tags` if cloned from this repository): 1.1.10
- Distribution: Debian Ubuntu 22.04
- Kernel version (ex. `uname -srmo`): Linux 6.5.0-17-generic x86_64 GNU/Linux
- Output of `solaar show`:

<details>

```
solaar version 1.1.10

Bolt Receiver
  Device path  : /dev/hidraw3
  USB id       : 046d:C548
  Serial       : 44464142443445383044444133383744
  Has 1 paired device(s) out of a maximum of 6.
  Notifications: wireless (0x000100)
  Device activity counters: 1=55

  1: MX Keys S
     Device path  : None
     WPID         : B378
     Codename     : MX KEYS S
     Kind         : keyboard
     Protocol     : HID++ 4.5
     Serial number: FB49DE4E
     Model ID:      B37800000000
     Unit ID:       FB49DE4E
        Bootloader: BL1 88.01.B0015
          Firmware: RBK 81.01.B0015
             Other: 
     The power switch is located on the (unknown).
     Supports 34 HID++ 2.0 features:
         0: ROOT                   {0000} V0     
         1: FEATURE SET            {0001} V0     
         2: DEVICE FW VERSION      {0003} V4     
            Firmware: Bootloader BL1 88.01.B0015 B37802EEF676
            Firmware: Firmware RBK 81.01.B0015 B37802EEF676
            Firmware: Other   
            Unit ID: FB49DE4E  Model ID: B37800000000  Transport IDs: {'btleid': 'B378'}
         3: DEVICE NAME            {0005} V0     
            Name: MX Keys S
            Kind: keyboard
         4: WIRELESS DEVICE STATUS {1D4B} V0     
         5: CONFIG CHANGE          {0020} V0     
         6: DEVICE FRIENDLY NAME   {0007} V0     
            Friendly Name: MX KEYS S
         7: unknown:0011           {0011} V0     
         8: UNIFIED BATTERY        {1004} V3     
            Battery: 65%, discharging.
         9: REPROG CONTROLS V4     {1B04} V5     
            Key/Button Diversion (saved): {Calculator:Regular, Lock PC:Regular, Brightness Down:Regular, Brightness Up:Regular, Backlight Down:Regular, Backlight Up:Regular, Previous Fn:Regular, Play/Pause Fn:Regular, Next Fn:Regular, Mute Fn:Regular, Volume Down Fn:Regular, Volume Up Fn:Regular, App Contextual Menu/Right Click:Regular, Voice Dictation:Regular, Open Emoji Panel:Regular, Snipping Tool:Regular, Mute Microphone:Regular}
            Key/Button Diversion        : {Calculator:Regular, Lock PC:Regular, Brightness Down:Regular, Brightness Up:Regular, Backlight Down:Regular, Backlight Up:Regular, Previous Fn:Regular, Play/Pause Fn:Regular, Next Fn:Regular, Mute Fn:Regular, Volume Down Fn:Regular, Volume Up Fn:Regular, App Contextual Menu/Right Click:Regular, Voice Dictation:Regular, Open Emoji Panel:Regular, Snipping Tool:Regular, Mute Microphone:Regular}
        10: CHANGE HOST            {1814} V1     
            Change Host        : 1:it-raykovskyy
        11: HOSTS INFO             {1815} V2     
            Host 0 (paired): it-raykovskyy
            Host 1 (paired): it-raykovskyy
            Host 2 (unpaired): 
        12: BACKLIGHT2             {1982} V3     
            Backlight (saved): True
            Backlight        : True
        13: K375S FN INVERSION     {40A3} V0     
            Swap Fx function (saved): False
            Swap Fx function        : False
        14: LOCK KEY STATE         {4220} V0     
        15: KEYBOARD DISABLE KEYS  {4521} V0     
            Disable keys (saved): {Caps Lock:False, Num Lock:False, Scroll Lock:False, Insert:False, Win:False}
            Disable keys        : {Caps Lock:False, Num Lock:False, Scroll Lock:False, Insert:False, Win:False}
        16: MULTIPLATFORM          {4531} V1     
            Set OS (saved): 3
            Set OS        : Chrome
        17: KEYBOARD LAYOUT 2      {4540} V0     
        18: DFUCONTROL             {00C3} V0     
        19: DEVICE RESET           {1802} V0    internal, hidden, unknown:000010 
        20: unknown:1803           {1803} V0    internal, hidden, unknown:000010 
        21: unknown:1807           {1807} V0    internal, hidden, unknown:000010 
        22: unknown:1816           {1816} V0    internal, hidden, unknown:000010 
        23: OOBSTATE               {1805} V0    internal, hidden 
        24: unknown:1830           {1830} V0    internal, hidden, unknown:000010 
        25: unknown:1891           {1891} V9    internal, hidden, unknown:000008 
        26: unknown:18A1           {18A1} V0    internal, hidden, unknown:000010 
        27: unknown:1E00           {1E00} V0    hidden 
        28: unknown:1E02           {1E02} V0    internal, hidden 
        29: unknown:1602           {1602} V0     
        30: unknown:1EB0           {1EB0} V0    internal, hidden, unknown:000010 
        31: unknown:1861           {1861} V1    internal, hidden, unknown:000010 
        32: unknown:1A20           {1A20} V1    internal, hidden, unknown:000010 
        33: unknown:18B0           {18B0} V1    internal, hidden, unknown:000010 
     Has 21 reprogrammable keys:
         0: Brightness Down           , default: Brightness Down             => Brightness Down           
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:1, group:0, group mask:empty
             reporting: default
         1: Brightness Up             , default: Brightness Up               => Brightness Up             
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:2, group:0, group mask:empty
             reporting: default
         2: Backlight Down            , default: Backlight Down              => Backlight Down            
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:3, group:0, group mask:empty
             reporting: default
         3: Backlight Up              , default: Backlight Up                => Backlight Up              
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:4, group:0, group mask:empty
             reporting: default
         4: Voice Dictation           , default: Voice Dictation             => Voice Dictation           
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:5, group:0, group mask:empty
             reporting: default
         5: Open Emoji Panel          , default: Open Emoji Panel            => Open Emoji Panel          
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:6, group:0, group mask:empty
             reporting: default
         6: Mute Microphone           , default: Mute Microphone             => Mute Microphone           
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:7, group:0, group mask:empty
             reporting: default
         7: Previous Fn               , default: Previous                    => Previous                  
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:8, group:0, group mask:empty
             reporting: default
         8: Play/Pause Fn             , default: Play/Pause                  => Play/Pause                
             is FN, FN sensitive, reprogrammable, divertable, analytics key events, pos:9, group:0, group mask:empty
             reporting: default
         9: Next Fn                   , default: Next                        => Next                      
             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:0, group:0, group mask:empty
             reporting: default
        13: Calculator                , default: Calculator                  => Calculator                
             nonstandard, reprogrammable, divertable, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        14: Snipping Tool             , default: Snipping Tool               => Snipping Tool             
             nonstandard, reprogrammable, divertable, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        15: App Contextual Menu/Right Click, default: Right Click/App Contextual Menu => Right Click/App Contextual Menu
             nonstandard, reprogrammable, divertable, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        16: Lock PC                   , default: WindowsLock                 => WindowsLock               
             nonstandard, reprogrammable, divertable, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        17: Host Switch Channel 1     , default: HostSwitch Channel 1        => HostSwitch Channel 1      
             nonstandard, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        18: Host Switch Channel 2     , default: HostSwitch Channel 2        => HostSwitch Channel 2      
             nonstandard, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        19: Host Switch Channel 3     , default: HostSwitch Channel 3        => HostSwitch Channel 3      
             nonstandard, analytics key events, pos:0, group:0, group mask:empty
             reporting: default
        20: F Lock                    , default: Do Nothing One              => Do Nothing One            
             analytics key events, pos:0, group:0, group mask:empty
             reporting: default
     Battery: 65%, discharging.

Receiver
  Device path  : /dev/hidraw5
  USB id       : 046d:C542
  Serial       : None
  Has 0 paired device(s) out of a maximum of 1.

```
</details>

- Contents of `~/.config/solaar/config.yaml`

<details>

```
- 1.1.10
- _NAME: MX Keys S
  _absent: [hi-res-scroll, lowres-scroll-mode, hires-smooth-invert, hires-smooth-resolution, hires-scroll-mode, scroll-ratchet, smart-shift, thumb-scroll-invert,
    thumb-scroll-mode, onboard_profiles, report_rate, pointer_speed, dpi, speed-change, backlight-timed, reprogrammable-keys, persistent-remappable-keys,
    crown-smooth, divert-crown, divert-gkeys, m-key-leds, mr-key-led, gesture2-gestures, gesture2-divert, gesture2-params, sidetone, equalizer, adc_power_management]
  _battery: 4100
  _modelId: B37800000000
  _sensitive: {backlight: true, fn-swap: true, multiplatform: true}
  _serial: FB49DE4E
  _unitId: FB49DE4E
  _wpid: B378
  backlight: true
  change-host: null
  disable-keyboard-keys: {1: false, 2: false, 4: false, 8: false, 16: false}
  divert-keys: {10: 0, 111: 0, 199: 0, 200: 0, 226: 0, 227: 0, 228: 0, 229: 0, 230: 0, 231: 0, 232: 0, 233: 0, 234: 0, 259: 0, 264: 0, 266: 0, 284: 0}
  fn-swap: false
  multiplatform: '3'
```
</details>


- Errors or warrnings from Solaar:

<details>

```
2024-02-14 00:19:39,564,564     INFO [MainThread] root: version 1.1.10, language en_US (UTF-8)
2024-02-14 00:19:39,687,687     INFO [MainThread] logitech_receiver.diversion: GDK Keymap set up
2024-02-14 00:19:39,699,699     INFO [MainThread] solaar.upower: connected to system dbus, watching for suspend/resume events
2024-02-14 00:19:39,736,736     INFO [MainThread] solaar.ui.notify: starting desktop notifications
2024-02-14 00:19:39,778,778     INFO [MainThread] solaar.listener: starting receiver listening threads
2024-02-14 00:19:39,780,780  WARNING [MainThread] hidapi.udev: Report Descriptor not processed for BID 0003 VID 0000046D PID 0000C548: No module named 'hid_parser'
2024-02-14 00:19:39,780,780     INFO [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C548 HID++ None None USB 0 2
2024-02-14 00:19:39,780,780  WARNING [MainThread] hidapi.udev: Report Descriptor not processed for BID 0003 VID 0000046D PID 0000C548: No module named 'hid_parser'
2024-02-14 00:19:39,780,780     INFO [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C548 HID++ None None USB 1 2
2024-02-14 00:19:39,781,781  WARNING [MainThread] hidapi.udev: Report Descriptor not processed for BID 0003 VID 0000046D PID 0000C548: No module named 'hid_parser'
2024-02-14 00:19:39,781,781     INFO [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C548 HID++ None None USB 2 2
2024-02-14 00:19:39,781,781     INFO [MainThread] solaar.listener: receiver event add DeviceInfo(path='/dev/hidraw3', bus_id=3, vendor_id='046D', product_id='C548', interface=2, driver='hid-generic', manufacturer=None, product=None, serial='', release=None, isDevice=None, hidpp_short=None, hidpp_long=None)
2024-02-14 00:19:39,781,781     INFO [MainThread] hidapi.udev: OPEN PATH /dev/hidraw3
2024-02-14 00:19:39,781,781     INFO [MainThread] logitech_receiver.base: New lock 13
2024-02-14 00:19:39,782,782     INFO [ReceiverListener:hidraw3] logitech_receiver.listener: started with <BoltReceiver(/dev/hidraw3,13)> (13)
2024-02-14 00:19:39,782,782     INFO [ReceiverListener:hidraw3] solaar.listener: <BoltReceiver(/dev/hidraw3,13)>: notifications listener has started (13)
2024-02-14 00:19:39,782,782     INFO [ReceiverListener:hidraw3] logitech_receiver.base: New lock <_ThreadedHandle(/dev/hidraw3)>
2024-02-14 00:19:39,782,782  WARNING [MainThread] hidapi.udev: Report Descriptor not processed for BID 0003 VID 0000046D PID 0000C548: No module named 'hid_parser'
2024-02-14 00:19:39,783,783  WARNING [MainThread] hidapi.udev: Report Descriptor not processed for BID 0003 VID 0000046D PID 0000C542: No module named 'hid_parser'
2024-02-14 00:19:39,783,783     INFO [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C542 HID++ None None USB 0 None
2024-02-14 00:19:39,783,783     INFO [MainThread] solaar.listener: receiver event add DeviceInfo(path='/dev/hidraw5', bus_id=3, vendor_id='046D', product_id='C542', interface=0, driver='hid-generic', manufacturer=None, product=None, serial='', release=None, isDevice=False, hidpp_short=None, hidpp_long=None)
2024-02-14 00:19:39,783,783     INFO [MainThread] hidapi.udev: OPEN PATH /dev/hidraw5
2024-02-14 00:19:39,783,783  WARNING [MainThread] logitech_receiver.receiver: Unknown receiver type: C542
2024-02-14 00:19:39,783,783     INFO [MainThread] logitech_receiver.base: New lock 14
2024-02-14 00:19:39,786,786     INFO [ReceiverListener:hidraw3] logitech_receiver.receiver: <BoltReceiver(/dev/hidraw3,13)>: receiver notifications enabled => ('wireless', 'software present')
2024-02-14 00:19:39,791,791     INFO [ReceiverListener:hidraw3] solaar.listener: status_changed <BoltReceiver(/dev/hidraw3,13)>: present, No paired devices. (0) 
2024-02-14 00:19:40,798,798     INFO [ReceiverListener:hidraw3] logitech_receiver.receiver: <BoltReceiver(/dev/hidraw3,13)>: found new device 1 (B378)
2024-02-14 00:19:40,798,798     INFO [ReceiverListener:hidraw3] solaar.listener: connection Notification(10,1,41,10,0178B3) for <Device(1,B378,MX Keys S,FB49DE4E)> (keyboard)
2024-02-14 00:19:41,586,586  WARNING [MainThread] logitech_receiver.base: timeout (1.80/1.80) on device 255 request {83B5} params [03]
2024-02-14 00:19:41,756,756     INFO [ReceiverListener:hidraw3] solaar.listener: status_changed <BoltReceiver(/dev/hidraw3,13)>: present, 1 paired device. (0) 
2024-02-14 00:19:41,758,758     INFO [ReceiverListener:hidraw5] logitech_receiver.listener: started with <Receiver(/dev/hidraw5,14)> (14)
2024-02-14 00:19:41,759,759     INFO [ReceiverListener:hidraw5] solaar.listener: <Receiver(/dev/hidraw5,14)>: notifications listener has started (14)
2024-02-14 00:19:41,760,760     INFO [ReceiverListener:hidraw5] logitech_receiver.base: New lock <_ThreadedHandle(/dev/hidraw5)>
2024-02-14 00:19:41,768,768  WARNING [MainThread] hidapi.udev: Report Descriptor not processed for BID 0018 VID 000004F3 PID 00003091: No module named 'hid_parser'
2024-02-14 00:19:41,844,844     INFO [ReceiverListener:hidraw3] solaar.listener: status_changed <Device(1,B378,MX Keys S,FB49DE4E)>: paired online, {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 65, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': None, 'BATTERY VOLTAGE': None, 'BATTERY CHARGING': False, 'ERROR': None} (0) 
2024-02-14 00:19:42,579,579     INFO [ReceiverListener:hidraw3] logitech_receiver.status: <Device(1,B378,MX Keys S,FB49DE4E)> pushing device settings [<Setting([feature:toggle] MX KEYS S:backlight=None)>, <Setting([feature:toggle] MX KEYS S:fn-swap=None)>, <Setting([feature:map choice] MX KEYS S:divert-keys=None)>, <Setting([feature:multiple toggle] MX KEYS S:disable-keyboard-keys=None)>, <Setting([feature:choice] MX KEYS S:multiplatform=None)>, <Setting([feature:choice] MX KEYS S:change-host=None)>]
2024-02-14 00:19:42,609,609    ERROR [ReceiverListener:hidraw3] logitech_receiver.base: (13) device 1 error on feature request {0C19}: 2 = invalid argument
2024-02-14 00:19:42,609,609  WARNING [ReceiverListener:hidraw3] logitech_receiver.settings: backlight: error applying value True so ignore it (<Device(1,B378,MX Keys S,FB49DE4E)>)
2024-02-14 00:19:42,834,834  WARNING [ReceiverListener:hidraw5] logitech_receiver.base: timeout (1.07/0.90) on device 255 request {8000} params [100900]
2024-02-14 00:19:42,962,962     INFO [ReceiverListener:hidraw3] solaar.listener: status_changed <Device(1,B378,MX Keys S,FB49DE4E)>: paired online, {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 65, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': None, 'BATTERY VOLTAGE': None, 'BATTERY CHARGING': False, 'ERROR': None} (0) 
2024-02-14 00:19:44,002,002  WARNING [ReceiverListener:hidraw5] logitech_receiver.base: timeout (1.17/0.90) on device 255 request {8100} params []
2024-02-14 00:19:44,003,003     INFO [ReceiverListener:hidraw5] logitech_receiver.receiver: <Receiver(/dev/hidraw5,14)>: receiver notifications enabled => None
Exception in thread ReceiverListener:hidraw5:
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/share/solaar/lib/logitech_receiver/listener.py", line 156, in run
    self.has_started()
  File "/usr/share/solaar/lib/solaar/listener.py", line 93, in has_started
    assert self.receiver.isDevice or ((nfs if nfs else 0) & _hidpp10.NOTIFICATION_FLAG.wireless), \
AssertionError: Receiver on /dev/hidraw5 does not support connection notifications, GUI will not show it
```

</details>


**Describe the bug**
For my keyboard Swap Fx function does not work and F-keys always run special operations.
The first time I installed Solaar it worked well but one day stopped and it seems like  

**To Reproduce**
Steps to reproduce the behavior:
1. Go to window 
2. Click on Swap Fx function (off position)
3. Scroll down to '....'
4. See error F1 press reducing the brightness of my screen instead of opening the Google support page
5. Go to terminal
6. Input Solaar config 1 fn-swap off
7. See error F1 press reducing the brightness of my screen ...
same attitude if changed from the terminal
**Screenshots**
![image](https://github.com/pwr-Solaar/Solaar/assets/3765745/3be2506d-8cb4-4f9c-b043-085b2c0547ee)
.



Discussion:
A side point:  You have a second receiver, the one with USB id C542.  What receiver is this and what is connected to it?

I have a different keyboard that supports the same feature, but the setting works fine on my device.   

Please run Solaar as `solaar -ddd`.  That will produce a lot of output.  Unlock the `Swap Fx functon` and change the value twice.  Post the output from Solaar, but  just the lines around the time you changed the setting value.

Here is what I see.

```
2024-02-14 10:24:44,841,841    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write False to <Device(255,B350,Craft Advanced Keyboard,)>
2024-02-14 10:24:44,841,841    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(False, None) => b'\x00'
2024-02-14 10:24:44,841,841    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(False) => b'\x00'
2024-02-14 10:24:44,841,841     INFO [AsyncUI] hidapi.udev: OPEN PATH /dev/hidraw4
2024-02-14 10:24:44,841,841    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 FF 0D19 FF000000000000000000000000000000]
2024-02-14 10:24:45,287,287    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 FF 0D19 FF000101000000000000000000000000]
2024-02-14 10:24:45,288,288    DEBUG [ReceiverListener:hidraw4] logitech_receiver.base: (16) => r[11 FF 0D19 FF000101000000000000000000000000]
2024-02-14 10:24:49,855,855     INFO [MainThread] solaar.configuration: saved ['1.1.11rc2-3-gfb5b7e05', {'_NAME': 'G502 Gaming Mouse', '_modelId': '407FC08D0000', '_sensitive': {'dpi': True, 'hires-scroll-mode': 'ignore', 'hires-smooth-invert': 'ignore', 'hires-smooth-resolution': 'ignore', 'led_zone_1': True, 'led_zone_2': True, 'onboard_profiles': True, 'report_rate': 'ignore'}, '_serial': '1F2DBC7E', '_unitId': '1F2DBC7E', '_wpid': '407F', 'dpi': 2400, 'hires-scroll-mode': False, 'hires-smooth-invert': False, 'hires-smooth-resolution': True, 'led_control': 0, 'led_zone_1': <logitech_receiver.hidpp20.LEDEffectSetting object at 0x7f51c338a9c0>, 'led_zone_2': <logitech_receiver.hidpp20.LEDEffectSetting object at 0x7f51c338a9f0>, 'onboard_profiles': 0, 'report_rate': 1}, {'_NAME': 'Craft Advanced Keyboard', '_absent': ['hi-res-scroll', 'lowres-scroll-mode', 'hires-smooth-invert', 'hires-smooth-resolution', 'hires-scroll-mode', 'scroll-ratchet', 'smart-shift', 'thumb-scroll-invert', 'thumb-scroll-mode', 'onboard_profiles', 'report_rate', 'report_rate_extended', 'pointer_speed', 'dpi', 'speed-change', 'backlight_level', 'backlight_duration_hands_out', 'backlight_duration_hands_in', 'backlight_duration_powered', 'backlight-timed', 'led_control', 'led_zone_', 'reprogrammable-keys', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params', 'sidetone', 'equalizer', 'adc_power_management'], '_battery': 4096, '_modelId': 'B35040660000', '_sensitive': {'backlight': True, 'divert-keys': True, 'fn-swap': True, 'hires-scroll-mode': 'ignore', 'hires-smooth-invert': 'ignore', 'hires-smooth-resolution': 'ignore'}, '_unitId': '43DAF041', 'backlight': 0, 'change-host': None, 'crown-smooth': False, 'disable-keyboard-keys': {1: False, 2: False, 4: False, 8: False, 16: False}, 'divert-crown': False, 'divert-keys': {10: 0, 110: 0, 111: 0, 191: 0, 199: 0, 200: 0, 209: 0, 210: 0, 211: 0, 224: 0, 225: 0, 226: 0, 227: 0, 228: 0, 229: 0, 230: 0, 231: 0, 232: 0, 233: 0, 234: 0, 235: 0, 236: 0}, 'fn-swap': False, 'multiplatform': 0, 'persistent-remappable-keys': None}, {'_NAME': 'MX Master 3 Wireless Mouse', '_absent': ['hi-res-scroll', 'lowres-scroll-mode', 'onboard_profiles', 'report_rate', 'report_rate_extended', 'pointer_speed', 'speed-change', 'backlight', 'backlight_level', 'backlight_duration_hands_out', 'backlight_duration_hands_in', 'backlight_duration_powered', 'backlight-timed', 'led_control', 'led_zone_', 'fn-swap', 'persistent-remappable-keys', 'disable-keyboard-keys', 'crown-smooth', 'divert-crown', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'multiplatform', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params', 'sidetone', 'equalizer', 'adc_power_management'], '_battery': 4096, '_modelId': 'B02340820000', '_sensitive': {'divert-keys': True}, '_unitId': '198E3EB8', 'change-host': None, 'divert-keys': {82: 0, 83: 0, 86: 0, 195: 2, 196: 3}, 'dpi': 1100, 'hires-scroll-mode': False, 'hires-smooth-invert': False, 'hires-smooth-resolution': True, 'reprogrammable-keys': {80: 80, 81: 81, 82: 82, 83: 83, 86: 86, 195: 195, 196: 196}, 'scroll-ratchet': 2, 'smart-shift': 23, 'thumb-scroll-invert': False, 'thumb-scroll-mode': False}] to /home/pfps/.config/solaar/config.yaml
2024-02-14 10:25:03,561,561    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write True to <Device(255,B350,Craft Advanced Keyboard,)>
2024-02-14 10:25:03,562,562    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(True, None) => b'\x01'
2024-02-14 10:25:03,562,562    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(True) => b'\x01'
2024-02-14 10:25:03,562,562    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 FF 0D1A FF010000000000000000000000000000]
2024-02-14 10:25:03,805,805    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 FF 0D1A FF010101000000000000000000000000]
2024-02-14 10:25:03,806,806    DEBUG [ReceiverListener:hidraw4] logitech_receiver.base: (16) => r[11 FF 0D1A FF010101000000000000000000000000]
2024-02-14 10:25:08,576,576     INFO [MainThread] solaar.configuration: saved ['1.1.11rc2-3-gfb5b7e05', {'_NAME': 'G502 Gaming Mouse', '_modelId': '407FC08D0000', '_sensitive': {'dpi': True, 'hires-scroll-mode': 'ignore', 'hires-smooth-invert': 'ignore', 'hires-smooth-resolution': 'ignore', 'led_zone_1': True, 'led_zone_2': True, 'onboard_profiles': True, 'report_rate': 'ignore'}, '_serial': '1F2DBC7E', '_unitId': '1F2DBC7E', '_wpid': '407F', 'dpi': 2400, 'hires-scroll-mode': False, 'hires-smooth-invert': False, 'hires-smooth-resolution': True, 'led_control': 0, 'led_zone_1': <logitech_receiver.hidpp20.LEDEffectSetting object at 0x7f51c338a9c0>, 'led_zone_2': <logitech_receiver.hidpp20.LEDEffectSetting object at 0x7f51c338a9f0>, 'onboard_profiles': 0, 'report_rate': 1}, {'_NAME': 'Craft Advanced Keyboard', '_absent': ['hi-res-scroll', 'lowres-scroll-mode', 'hires-smooth-invert', 'hires-smooth-resolution', 'hires-scroll-mode', 'scroll-ratchet', 'smart-shift', 'thumb-scroll-invert', 'thumb-scroll-mode', 'onboard_profiles', 'report_rate', 'report_rate_extended', 'pointer_speed', 'dpi', 'speed-change', 'backlight_level', 'backlight_duration_hands_out', 'backlight_duration_hands_in', 'backlight_duration_powered', 'backlight-timed', 'led_control', 'led_zone_', 'reprogrammable-keys', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params', 'sidetone', 'equalizer', 'adc_power_management'], '_battery': 4096, '_modelId': 'B35040660000', '_sensitive': {'backlight': True, 'divert-keys': True, 'fn-swap': True, 'hires-scroll-mode': 'ignore', 'hires-smooth-invert': 'ignore', 'hires-smooth-resolution': 'ignore'}, '_unitId': '43DAF041', 'backlight': 0, 'change-host': None, 'crown-smooth': False, 'disable-keyboard-keys': {1: False, 2: False, 4: False, 8: False, 16: False}, 'divert-crown': False, 'divert-keys': {10: 0, 110: 0, 111: 0, 191: 0, 199: 0, 200: 0, 209: 0, 210: 0, 211: 0, 224: 0, 225: 0, 226: 0, 227: 0, 228: 0, 229: 0, 230: 0, 231: 0, 232: 0, 233: 0, 234: 0, 235: 0, 236: 0}, 'fn-swap': True, 'multiplatform': 0, 'persistent-remappable-keys': None}, {'_NAME': 'MX Master 3 Wireless Mouse', '_absent': ['hi-res-scroll', 'lowres-scroll-mode', 'onboard_profiles', 'report_rate', 'report_rate_extended', 'pointer_speed', 'speed-change', 'backlight', 'backlight_level', 'backlight_duration_hands_out', 'backlight_duration_hands_in', 'backlight_duration_powered', 'backlight-timed', 'led_control', 'led_zone_', 'fn-swap', 'persistent-remappable-keys', 'disable-keyboard-keys', 'crown-smooth', 'divert-crown', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'multiplatform', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params', 'sidetone', 'equalizer', 'adc_power_management'], '_battery': 4096, '_modelId': 'B02340820000', '_sensitive': {'divert-keys': True}, '_unitId': '198E3EB8', 'change-host': None, 'divert-keys': {82: 0, 83: 0, 86: 0, 195: 2, 196: 3}, 'dpi': 1100, 'hires-scroll-mode': False, 'hires-smooth-invert': False, 'hires-smooth-resolution': True, 'reprogrammable-keys': {80: 80, 81: 81, 82: 82, 83: 83, 86: 86, 195: 195, 196: 196}, 'scroll-ratchet': 2, 'smart-shift': 23, 'thumb-scroll-invert': False, 'thumb-scroll-mode': False}] to /home/pfps/.config/solaar/config.yaml
```
A side point: You have a second receiver, the one with USB ID C542. What receiver is this and what is connected to it? 
- it is the receiver from my old logi m220 mouse


What I see:
<details>

```
2024-02-14 17:38:35,377,377    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write True to <Device(1,B378,MX Keys S,FB49DE4E)>
2024-02-14 17:38:35,377,377    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(True, None) => b'\x01'
2024-02-14 17:38:35,377,377    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(True) => b'\x01'
2024-02-14 17:38:35,377,377     INFO [AsyncUI] hidapi.udev: OPEN PATH /dev/hidraw3
2024-02-14 17:38:35,377,377    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 01 0D1C FF010000000000000000000000000000]
2024-02-14 17:38:35,464,464    DEBUG [ReceiverListener:hidraw3] logitech_receiver.base: (13) => r[11 01 0D1C FF000101000000000000000000000000]
2024-02-14 17:38:35,464,464    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 01 0D1C FF000101000000000000000000000000]
2024-02-14 17:38:40,390,390     INFO [MainThread] solaar.configuration: saved ['1.1.10', {'_NAME': 'MX Keys S', '_absent': ['hi-res-scroll', 'lowres-scroll-mode', 'hires-smooth-invert', 'hires-smooth-resolution', 'hires-scroll-mode', 'scroll-ratchet', 'smart-shift', 'thumb-scroll-invert', 'thumb-scroll-mode', 'onboard_profiles', 'report_rate', 'pointer_speed', 'dpi', 'speed-change', 'backlight-timed', 'reprogrammable-keys', 'persistent-remappable-keys', 'crown-smooth', 'divert-crown', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params', 'sidetone', 'equalizer', 'adc_power_management'], '_battery': 4100, '_modelId': 'B37800000000', '_sensitive': {'backlight': True, 'fn-swap': True, 'multiplatform': True}, '_serial': 'FB49DE4E', '_unitId': 'FB49DE4E', '_wpid': 'B378', 'backlight': True, 'change-host': None, 'disable-keyboard-keys': {1: False, 2: False, 4: False, 8: False, 16: False}, 'divert-keys': {10: 0, 111: 0, 199: 0, 200: 0, 226: 0, 227: 0, 228: 0, 229: 0, 230: 0, 231: 0, 232: 0, 233: 0, 234: 0, 259: 0, 264: 0, 266: 0, 284: 0}, 'fn-swap': True, 'multiplatform': '3'}] to /home/raykovskyy/.config/solaar/config.yaml
2024-02-14 17:38:42,559,559    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write False to <Device(1,B378,MX Keys S,FB49DE4E)>
2024-02-14 17:38:42,560,560    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(False, None) => b'\x00'
2024-02-14 17:38:42,561,561    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(False) => b'\x00'
2024-02-14 17:38:42,561,561    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 01 0D1E FF000000000000000000000000000000]
2024-02-14 17:38:43,294,294    DEBUG [ReceiverListener:hidraw3] logitech_receiver.base: (13) => r[11 01 0D1E FF000101000000000000000000000000]
2024-02-14 17:38:43,294,294    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 01 0D1E FF000101000000000000000000000000]
```
</details>
Thank you for responce
From your output Solaar appears to be writing correct commands, which the device is accepting, but the responses appear to indicate that the device is not changing the state of Fx swap.  I'll see if anyone knows whether this is a problem with the keyboard itself.

Can you switch the behaviour by pressing keys on your keyboard?  The probable way to do this is using fn-esc.
Ohhhh! Yeah Fn FkMe is the right answer, God, how much time I wasted! I must have pushed that combination unintentionally. Thank @pfps  you bearded guy.
Your other receiver is marked as not being supported by Solaar but it might be useful to verify this.  The tool to do this is `solaar probe <name>` but the problem is that the name of the receiver is a subset of the name of your other receiver so that you will have to disconnect your Bolt Receiver and then run `solaar probe`.   If you can't do this then don't worry.
I'm still going to try to see whether there is a bug in the MK Keys S.
Also, can you do the same test with `solaar -ddd` as above?  Try switching four times and post the output.
anything you ask 
<details>

```
2024-02-14 18:16:23,831,831    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write True to <Device(1,B378,MX Keys S,FB49DE4E)>
2024-02-14 18:16:23,832,832    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(True, None) => b'\x01'
2024-02-14 18:16:23,832,832    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(True) => b'\x01'
2024-02-14 18:16:23,832,832     INFO [AsyncUI] hidapi.udev: OPEN PATH /dev/hidraw3
2024-02-14 18:16:23,833,833    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 01 0D19 FF010000000000000000000000000000]
2024-02-14 18:16:24,417,417    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 01 0D19 FF000101000000000000000000000000]
2024-02-14 18:16:24,418,418    DEBUG [ReceiverListener:hidraw3] logitech_receiver.base: (13) => r[11 01 0D19 FF000101000000000000000000000000]
2024-02-14 18:16:26,362,362    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write False to <Device(1,B378,MX Keys S,FB49DE4E)>
2024-02-14 18:16:26,362,362    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(False, None) => b'\x00'
2024-02-14 18:16:26,363,363    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(False) => b'\x00'
2024-02-14 18:16:26,363,363    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 01 0D1E FF000000000000000000000000000000]
2024-02-14 18:16:26,960,960    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 01 0D1E FF000101000000000000000000000000]
2024-02-14 18:16:26,961,961    DEBUG [ReceiverListener:hidraw3] logitech_receiver.base: (13) => r[11 01 0D1E FF000101000000000000000000000000]
2024-02-14 18:16:28,838,838     INFO [MainThread] solaar.configuration: saved ['1.1.10', {'_NAME': 'MX Keys S', '_absent': ['hi-res-scroll', 'lowres-scroll-mode', 'hires-smooth-invert', 'hires-smooth-resolution', 'hires-scroll-mode', 'scroll-ratchet', 'smart-shift', 'thumb-scroll-invert', 'thumb-scroll-mode', 'onboard_profiles', 'report_rate', 'pointer_speed', 'dpi', 'speed-change', 'backlight-timed', 'reprogrammable-keys', 'persistent-remappable-keys', 'crown-smooth', 'divert-crown', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params', 'sidetone', 'equalizer', 'adc_power_management'], '_battery': 4100, '_modelId': 'B37800000000', '_sensitive': {'backlight': True, 'fn-swap': True, 'multiplatform': True}, '_serial': 'FB49DE4E', '_unitId': 'FB49DE4E', '_wpid': 'B378', 'backlight': True, 'change-host': None, 'disable-keyboard-keys': {1: False, 2: False, 4: False, 8: False, 16: False}, 'divert-keys': {10: 0, 111: 0, 199: 0, 200: 0, 226: 0, 227: 0, 228: 0, 229: 0, 230: 0, 231: 0, 232: 0, 233: 0, 234: 0, 259: 0, 264: 0, 266: 0, 284: 0}, 'fn-swap': False, 'multiplatform': '3'}] to /home/raykovskyy/.config/solaar/config.yaml
2024-02-14 18:16:29,162,162    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write True to <Device(1,B378,MX Keys S,FB49DE4E)>
2024-02-14 18:16:29,162,162    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(True, None) => b'\x01'
2024-02-14 18:16:29,162,162    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(True) => b'\x01'
2024-02-14 18:16:29,163,163    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 01 0D1B FF010000000000000000000000000000]
2024-02-14 18:16:29,989,989    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 01 0D1B FF000101000000000000000000000000]
2024-02-14 18:16:29,989,989    DEBUG [ReceiverListener:hidraw3] logitech_receiver.base: (13) => r[11 01 0D1B FF000101000000000000000000000000]
2024-02-14 18:16:32,160,160    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: write False to <Device(1,B378,MX Keys S,FB49DE4E)>
2024-02-14 18:16:32,161,161    DEBUG [AsyncUI] logitech_receiver.settings: BooleanValidator: prepare_write(False, None) => b'\x00'
2024-02-14 18:16:32,161,161    DEBUG [AsyncUI] logitech_receiver.settings: fn-swap: prepare write(False) => b'\x00'
2024-02-14 18:16:32,161,161    DEBUG [AsyncUI] logitech_receiver.base: (23) <= w[11 01 0D1F FF000000000000000000000000000000]
2024-02-14 18:16:33,019,019    DEBUG [ReceiverListener:hidraw3] logitech_receiver.base: (13) => r[11 01 0D1F FF000101000000000000000000000000]
2024-02-14 18:16:33,020,020    DEBUG [AsyncUI] logitech_receiver.base: (23) => r[11 01 0D1F FF000101000000000000000000000000]
2024-02-14 18:16:34,169,169     INFO [MainThread] solaar.configuration: saved ['1.1.10', {'_NAME': 'MX Keys S', '_absent': ['hi-res-scroll', 'lowres-scroll-mode', 'hires-smooth-invert', 'hires-smooth-resolution', 'hires-scroll-mode', 'scroll-ratchet', 'smart-shift', 'thumb-scroll-invert', 'thumb-scroll-mode', 'onboard_profiles', 'report_rate', 'pointer_speed', 'dpi', 'speed-change', 'backlight-timed', 'reprogrammable-keys', 'persistent-remappable-keys', 'crown-smooth', 'divert-crown', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params', 'sidetone', 'equalizer', 'adc_power_management'], '_battery': 4100, '_modelId': 'B37800000000', '_sensitive': {'backlight': True, 'fn-swap': True, 'multiplatform': True}, '_serial': 'FB49DE4E', '_unitId': 'FB49DE4E', '_wpid': 'B378', 'backlight': True, 'change-host': None, 'disable-keyboard-keys': {1: False, 2: False, 4: False, 8: False, 16: False}, 'divert-keys': {10: 0, 111: 0, 199: 0, 200: 0, 226: 0, 227: 0, 228: 0, 229: 0, 230: 0, 231: 0, 232: 0, 233: 0, 234: 0, 259: 0, 264: 0, 266: 0, 284: 0}, 'fn-swap': False, 'multiplatform': '3'}] to /home/raykovskyy/.config/solaar/config.yaml
```
</details>
Same result, unfortunately.  
solaar probe
<details>
Receiver
  Device path  : /dev/hidraw5
  USB id       : 046d:C542
  Serial       : None
  Has 0 paired device(s) out of a maximum of 1.

  Register Dump
    Notifications         0x00: None
    Connection State      0x02: None
    Device Activity       0xb3: None
    Pairing Register 0xb5 0x00: None
    Pairing Register 0xb5 0x01: None
    Pairing Register 0xb5 0x02: None
    Pairing Register 0xb5 0x03: None
    Pairing Register 0xb5 0x04: None
    Pairing Register 0xb5 0x05: None
    Pairing Register 0xb5 0x06: None
    Pairing Register 0xb5 0x07: None
    Pairing Register 0xb5 0x08: None
    Pairing Register 0xb5 0x09: None
    Pairing Register 0xb5 0x0a: None
    Pairing Register 0xb5 0x0b: None
    Pairing Register 0xb5 0x0c: None
    Pairing Register 0xb5 0x0d: None
    Pairing Register 0xb5 0x0e: None
    Pairing Register 0xb5 0x0f: None
    Pairing Register 0xb5 0x10: None
    Pairing Register 0xb5 0x20: None
    Pairing Register 0xb5 0x30: None
    Pairing Register 0xb5 0x50: None
    Pairing Name     0xb5 0x40: None
    Pairing Name     0xb5 0x60 0x1:  0 None
    Pairing Name     0xb5 0x60 0x2:  0 None
    Pairing Name     0xb5 0x60 0x3:  0 None
    Pairing Register 0xb5 0x11: None
    Pairing Register 0xb5 0x21: None
    Pairing Register 0xb5 0x31: None
    Pairing Register 0xb5 0x51: None
    Pairing Name     0xb5 0x41: None
    Pairing Name     0xb5 0x61 0x1:  0 None
    Pairing Name     0xb5 0x61 0x2:  0 None
    Pairing Name     0xb5 0x61 0x3:  0 None
    Pairing Register 0xb5 0x12: None
    Pairing Register 0xb5 0x22: None
    Pairing Register 0xb5 0x32: None
    Pairing Register 0xb5 0x52: None
    Pairing Name     0xb5 0x42: None
    Pairing Name     0xb5 0x62 0x1:  0 None
    Pairing Name     0xb5 0x62 0x2:  0 None
    Pairing Name     0xb5 0x62 0x3:  0 None
    Pairing Register 0xb5 0x13: None
    Pairing Register 0xb5 0x23: None
.... and keep going
</details>
Thanks.  That's good confirmation that the receiver can't work with Solaar.



Patch:
diff --git a/lib/logitech_receiver/settings_templates.py b/lib/logitech_receiver/settings_templates.py
index c474d149d6..58885f90e6 100644
--- a/lib/logitech_receiver/settings_templates.py
+++ b/lib/logitech_receiver/settings_templates.py
@@ -231,12 +231,25 @@ class _PerformanceMXDpi(RegisterDpi):
 
 
 # ignore the capabilities part of the feature - all devices should be able to swap Fn state
-# just use the current host (first byte = 0xFF) part of the feature to read and set the Fn state
+# can't just use the first byte = 0xFF (for current host) because of a bug in the firmware of the MX Keys S
 class K375sFnSwap(FnSwapVirtual):
     feature = _F.K375S_FN_INVERSION
-    rw_options = {"prefix": b"\xFF"}
     validator_options = {"true_value": b"\x01", "false_value": b"\x00", "read_skip_byte_count": 1}
 
+    class rw_class(_FeatureRW):
+        def find_current_host(self, device):
+            if not self.prefix:
+                response = device.feature_request(_F.HOSTS_INFO, 0x00)
+                self.prefix = response[3:4] if response else b"\xFF"
+
+        def read(self, device, data_bytes=b""):
+            self.find_current_host(device)
+            return super().read(device, data_bytes)
+
+        def write(self, device, data_bytes):
+            self.find_current_host(device)
+            return super().write(device, data_bytes)
+
 
 class FnSwap(FnSwapVirtual):
     feature = _F.FN_INVERSION
diff --git a/lib/solaar/listener.py b/lib/solaar/listener.py
index 859f6e757c..f0088fceac 100644
--- a/lib/solaar/listener.py
+++ b/lib/solaar/listener.py
@@ -204,11 +204,7 @@ def _notifications_handler(self, n):
         # Apply settings every time the device connects
         if n.sub_id == 0x41:
             if logger.isEnabledFor(logging.INFO):
-                try:
-                    dev.ping()
-                    logger.info("connection %s for %r", n, dev)
-                except Exception:
-                    logger.info("connection %s for unknown device, number %s", n, n.devnumber)
+                logger.info("connection %s for device wpid %s kind %s serial %s", n, dev.wpid, dev.kind, dev._serial)
             # If there are saved configs, bring the device's settings up-to-date.
             # They will be applied when the device is marked as online.
             configuration.attach_to(dev)
diff --git a/lib/solaar/ui/about.py b/lib/solaar/ui/about.py
index 6303d27b8d..e10c7f947e 100644
--- a/lib/solaar/ui/about.py
+++ b/lib/solaar/ui/about.py
@@ -37,6 +37,7 @@ def _create():
     about.set_version(__version__)
     about.set_comments(_("Manages Logitech receivers,\nkeyboards, mice, and tablets."))
     about.set_icon_name(NAME.lower())
+    about.set_logo_icon_name(NAME.lower())
 
     about.set_copyright("© 2012-2023 Daniel Pavel and contributors to the Solaar project")
     about.set_license_type(Gtk.License.GPL_2_0)


Test patch:
diff --git a/tests/logitech_receiver/test_setting_templates.py b/tests/logitech_receiver/test_setting_templates.py
index 84fcf090d1..b648dadf09 100644
--- a/tests/logitech_receiver/test_setting_templates.py
+++ b/tests/logitech_receiver/test_setting_templates.py
@@ -118,6 +118,19 @@ class FeatureTest:
         hidpp.Response("FF0001", 0x0600, "FF"),
         hidpp.Response("FF0101", 0x0610, "FF01"),
     ),
+    Setup(
+        FeatureTest(settings_templates.K375sFnSwap, False, True, offset=0x06),
+        hidpp.Response("050001", 0x0000, "1815"),  # HOSTS_INFO
+        hidpp.Response("FF0001", 0x0600, "FF"),
+        hidpp.Response("FF0101", 0x0610, "FF01"),
+    ),
+    Setup(
+        FeatureTest(settings_templates.K375sFnSwap, False, True, offset=0x06),
+        hidpp.Response("050001", 0x0000, "1815"),  # HOSTS_INFO
+        hidpp.Response("07050301", 0x0500),  # current host is 0x01, i.e., host 2
+        hidpp.Response("010001", 0x0600, "01"),
+        hidpp.Response("010101", 0x0610, "0101"),
+    ),
     Setup(
         FeatureTest(settings_templates.FnSwap, True, False),
         hidpp.Response("01", 0x0400),
@@ -473,6 +486,7 @@ def mock_gethostname(mocker):
 @pytest.mark.parametrize("test", simple_tests)
 def test_simple_template(test, mocker, mock_gethostname):
     tst = test.test
+    print("TEST", tst.sclass.feature)
     device = hidpp.Device(responses=test.responses, feature=tst.sclass.feature, offset=tst.offset, version=tst.version)
     spy_request = mocker.spy(device, "request")