pwr-Solaar / Solaar

Linux device manager for Logitech devices
https://pwr-solaar.github.io/Solaar
GNU General Public License v2.0
5.44k stars 404 forks source link

Support Multiplatform layout switching (features MULTIPLATFORM and DUALPLATFORM) #784

Closed kaechele closed 4 years ago

kaechele commented 4 years ago

Information



**Is your feature request related to a problem? Please describe.**

A Linux client will always use the keyboard layout of the last connected platform (Windows/Mac).
Let me elaborate:

Consider the following set-up:

- Thunderbolt Docking Station
- Logitech Unifying receiver connected to docking station
- Docking station is used alternately with a MacBook, a Fedora Linux laptop and a Windows laptop
- K850 Keyboard

The K850 keyboard has multi-platform support, i.e. is has keys that are printed for use with Mac (grey labelling) and Windows (white labelling).
When the last connected device was a Mac then the Linux machine will use the keyboard layout corresponding to the grey labelling, i.e. on the K850 this specifically means the Super key will be on the key labelled `Alt / Cmd` (Windows/Mac respectively).
If the last connected device was a Windows computer then it will use the Windows layout (white labelling), i.e. the Super key is the one labelled `Start / Alt Opt` which is physically located left of the `Alt / Cmd` key.

In essence, as a Linux user you will experience a different behaviour depending on which type of operating system was connected last. Basically every time the switch happens you will have to reassess which key is now `Alt` and which one is `Super`.

**Describe the solution you'd like**
Whenever the Keyboard is connected to a Linux client the Windows Layout should be requested.

**Describe alternatives you've considered**
N/A

**Additional context**
I believe this issue could be much more pronounced on keyboard layouts that label even more keys for dual use (i.e. German). I have both a US and a German K850 but haven't been able to test with the German one.

My wild guess is that this is what the `MULTIPLATFORM {4531}` feature does and thus it'd fall under #582 
pfps commented 4 years ago

Ignore this comment.

kaechele commented 4 years ago

I believe this request to be unrelated to the issue I described. My issue is with a platform specific layout being applied to the keyboard on Windows and Mac and the lack thereof on Linux which can have unexpected side effects depending on which layout was last applied before the user boots into or connects a Linux system. I believe the person you pointed to this issue is referring to the K850's feature of being able to switch between 3 different devices (Bluetooth or Unifying) and a potential ability of the protocol to set the keyboard to one of those three options from the host side.

pfps commented 4 years ago

Yeah, right. Sorry for the confusion.

pfps commented 4 years ago

In principle it would not be too hard to implement this feature, but I don't have documentation on how it is supposed to work. @FFY00 Do you have documentation on this feature (4351 probably)?

pfps commented 4 years ago

Getting documentation on features is a slow process. I have requests for documentation on features where Solaar is not behaving correctly and I want to get this documentation before asking for Multiplatform.

pfps commented 4 years ago

@kaechele PR #841 should solve your problem. It has had some testing but it would be nice to have it tested some more.

To test a pull request, first download Solaar from this repository if you have not already done so and cd to the download directory. The first time you test the pull request, fetch it into a new branch and checkout that branch, as in (where 841 is the number of the pull request):

git fetch origin pull/841/head:pull_841
git checkout pull_841

Run Solaar as bin/solaar and see whether you have a setting named "Set OS" and whether your changeable keys change when you change that setting.

kaechele commented 4 years ago

Unfortunately, no dice on my K850: Only multiplatform related debug output:

15:36:06,806    ERROR [ReceiverListener:hidraw0] logitech_receiver.settings_templates: check_feature[MULTIPLATFORM] inconsistent feature 0 (Android ) already known
pfps commented 4 years ago

@kaechele I think I know what went wrong but I'll need the output before that error message - about 30 lines worth.

kaechele commented 4 years ago

This is the entire output from Solaar once the device comes on:

``` 15:50:03,618 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[10 02 4104 B16240] 15:50:03,629 INFO [ReceiverListener:hidraw0] solaar.listener: Notification(2,41,04,B16240) triggered new device (keyboard) 15:50:03,629 INFO [ReceiverListener:hidraw0] solaar.listener: status_changed : present, 4 paired devices. (0) 15:50:03,631 DEBUG [ReceiverListener:hidraw0] logitech_receiver.notifications: : eQUAD step 4 DJ connection notification: software=True, encrypted=True, link=True, payload=True 15:50:03,631 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) pinging device 2 15:50:03,631 DEBUG [MainThread] solaar.ui: status changed: (NONE) None 15:50:03,632 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0019 000019] 15:50:03,632 DEBUG [MainThread] solaar.ui.icons: battery icon for 50:False = battery-good 15:50:03,636 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[20 02 0110 0000000000000000000000] 15:50:03,676 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[20 02 0100 0000000000000000000000] 15:50:03,696 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0700 5A320000000000000000000000000000] 15:50:03,716 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0019 04051900000000000000000000000000] 15:50:03,716 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000B 000100] 15:50:03,736 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0710 0400C21C0A0000000000000000000000] 15:50:03,756 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000B 01000100000000000000000000000000] 15:50:03,756 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 010C 000000] 15:50:03,796 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 010C 1E000000000000000000000000000000] 15:50:03,797 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0008 212000] 15:50:03,838 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0008 00000000000000000000000000000000] 15:50:03,838 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000E 213000] 15:50:03,878 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000E 00000000000000000000000000000000] 15:50:03,879 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000B 212100] 15:50:03,918 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000B 00000000000000000000000000000000] 15:50:03,919 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000A 40A000] 15:50:03,958 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000A 00000000000000000000000000000000] 15:50:03,958 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000B 40A200] 15:50:03,998 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000B 00000000000000000000000000000000] 15:50:03,998 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000D 40A300] 15:50:04,038 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000D 0C000000000000000000000000000000] 15:50:04,038 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings_templates: check_feature[K375S FN INVERSION] detected 15:50:04,038 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0008 220100] 15:50:04,078 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0008 00000000000000000000000000000000] 15:50:04,079 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000B 220500] 15:50:04,120 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000B 00000000000000000000000000000000] 15:50:04,121 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0008 211000] 15:50:04,160 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0008 00000000000000000000000000000000] 15:50:04,161 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000B 198200] 15:50:04,200 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000B 00000000000000000000000000000000] 15:50:04,201 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0009 1B0400] 15:50:04,240 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0009 0A000300000000000000000000000000] 15:50:04,241 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A0A 000000] 15:50:04,280 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A0A 15000000000000000000000000000000] 15:50:04,280 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A18 000000] 15:50:04,320 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A18 00D100AE640000000000000000000000] 15:50:04,320 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1D 010000] 15:50:04,360 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1D 00D200AF640000000000000000000000] 15:50:04,361 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A19 020000] 15:50:04,402 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A19 00D300B0640000000000000000000000] 15:50:04,403 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1F 030000] 15:50:04,442 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1F 00D500B27A0100000000000000000000] 15:50:04,443 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1F 040000] 15:50:04,482 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1F 00D600B37A0200000000000000000000] 15:50:04,482 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1F 050000] 15:50:04,522 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1F 00BD00997A0300000000000000000000] 15:50:04,522 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1B 060000] 15:50:04,562 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1B 00D400B17A0400000000000000000000] 15:50:04,563 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A19 070000] 15:50:04,602 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A19 000600066A0500000000000000000000] 15:50:04,603 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1A 080000] 15:50:04,642 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1A 000400046A0600000000000000000000] 15:50:04,643 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1F 090000] 15:50:04,684 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1F 000500056A0700000000000000000000] 15:50:04,684 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1C 0A0000] 15:50:04,724 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1C 000300036A0800000000000000000000] 15:50:04,725 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1C 0B0000] 15:50:04,764 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1C 000200026A0900000000000000000000] 15:50:04,765 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1A 0C0000] 15:50:04,804 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1A 000100016A0A00000000000000000000] 15:50:04,805 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1B 0D0000] 15:50:04,844 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1B 00C200447A0B00000000000000000000] 15:50:04,845 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1E 0E0000] 15:50:04,884 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1E 00DD00BA7A0C00000000000000000000] 15:50:04,884 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1E 0F0000] 15:50:04,924 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1E 00BF009B720000000000000000000000] 15:50:04,924 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1B 100000] 15:50:04,966 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1B 000A000A720000000000000000000000] 15:50:04,966 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1D 110000] 15:50:05,006 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1D 00C10070620000000000000000000000] 15:50:05,007 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1A 120000] 15:50:05,046 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1A 00C0006F620000000000000000000000] 15:50:05,046 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1C 130000] 15:50:05,086 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1C 00DE0062020000000000000000000000] 15:50:05,086 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0A1F 140000] 15:50:05,126 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0A1F 00340062040000000000000000000000] 15:50:05,127 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings_templates: check_feature[REPROG CONTROLS V4] detected None 15:50:05,128 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000A 452100] 15:50:05,166 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000A 0F000000000000000000000000000000] 15:50:05,167 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0F0D 000000] 15:50:05,206 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0F0D 1F000000000000000000000000000000] 15:50:05,207 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings_templates: check_feature[KEYBOARD DISABLE KEYS] detected 15:50:05,207 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0009 453100] 15:50:05,248 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0009 10000000000000000000000000000000] 15:50:05,248 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 1009 000000] 15:50:05,288 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 1009 03000303030100000000000000000000] 15:50:05,288 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 101E 000000] 15:50:05,328 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 101E 00001100000000000000000000000000] 15:50:05,328 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 101F 010000] 15:50:05,368 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 101F 01012000000000000000000000000000] 15:50:05,368 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 101B 020000] 15:50:05,408 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 101B 02024000000000000000000000000000] 15:50:05,408 ERROR [ReceiverListener:hidraw0] logitech_receiver.settings_templates: check_feature[MULTIPLATFORM] inconsistent feature 0 (Android ) already known 15:50:05,408 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000F 453000] 15:50:05,448 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000F 00000000000000000000000000000000] 15:50:05,448 DEBUG [ReceiverListener:hidraw0] logitech_receiver.status: pushing device settings [, ] 15:50:05,448 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: fn-swap: apply None () 15:50:05,448 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: fn-swap: settings read None from 15:50:05,449 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: fn-swap: settings write False to 15:50:05,449 INFO [ReceiverListener:hidraw0] solaar.configuration: saved {'405E:FDD5E7FC': {'_name': 'M720 Triathlon'}, '4060:3019E890': {'_name': 'Wireless Mouse MX Master'}, '4062:1A943920': {'_name': 'K850', 'disable-keyboard-keys': {'1': False, '16': False, '2': False, '4': False, '8': False}, 'fn-swap': False}, '4069:75811339': {'_name': 'Wireless Mouse MX Master 2S', 'dpi': 1000, 'hires-smooth-invert': False, 'hires-smooth-resolution': True, 'reprogrammable-keys': {'195': 195, '196': 196, '80': 80, '81': 81, '82': 82, '83': 83, '86': 86}, 'smart-shift': 16}, '_version': '1.0.2'} to /home/felix/.config/solaar/config.json 15:50:05,450 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0C0B 000000] 15:50:05,488 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0C0B 00010001000000000000000000000000] 15:50:05,489 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: BooleanValidator: prepare_write(False, b'\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') => b'\xff\x00' 15:50:05,489 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: fn-swap: settings prepare write(False) => b'\xff\x00' 15:50:05,490 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0C1E FF0000] 15:50:05,530 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0C1E FF000001000000000000000000000000] 15:50:05,530 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: disable-keyboard-keys: apply None () 15:50:05,530 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: disable-keyboard-keys: settings read None from 15:50:05,530 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: disable-keyboard-keys: settings write {'1': False, '16': False, '2': False, '4': False, '8': False} to 15:50:05,530 INFO [ReceiverListener:hidraw0] solaar.configuration: saved {'405E:FDD5E7FC': {'_name': 'M720 Triathlon'}, '4060:3019E890': {'_name': 'Wireless Mouse MX Master'}, '4062:1A943920': {'_name': 'K850', 'disable-keyboard-keys': {'1': False, '16': False, '2': False, '4': False, '8': False}, 'fn-swap': False}, '4069:75811339': {'_name': 'Wireless Mouse MX Master 2S', 'dpi': 1000, 'hires-smooth-invert': False, 'hires-smooth-resolution': True, 'reprogrammable-keys': {'195': 195, '196': 196, '80': 80, '81': 81, '82': 82, '83': 83, '86': 86}, 'smart-shift': 16}, '_version': '1.0.2'} to /home/felix/.config/solaar/config.json 15:50:05,531 DEBUG [ReceiverListener:hidraw0] logitech_receiver.settings: disable-keyboard-keys: settings prepare map write({'1': False, '16': False, '2': False, '4': False, '8': False}) => b'\x00' 15:50:05,531 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 0F2D 000000] 15:50:05,570 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0F2D 00000000000000000000000000000000] 15:50:05,570 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 000F 100000] 15:50:05,610 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000F 07000000000000000000000000000000] 15:50:05,610 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 070F 000000] 15:50:05,650 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 070F 5A320000000000000000000000000000] 15:50:05,650 DEBUG [ReceiverListener:hidraw0] logitech_receiver.hidpp20: device 2 battery 90% charged, next level 50% charge, status 0 = discharging 15:50:05,651 DEBUG [ReceiverListener:hidraw0] logitech_receiver.status: : battery 90, discharging 15:50:05,651 INFO [ReceiverListener:hidraw0] solaar.listener: status_changed : paired online, {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 90, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': 50, 'BATTERY CHARGING': False, 'ERROR': None} (0) 15:50:05,651 INFO [ReceiverListener:hidraw0] solaar.listener: status_changed : paired online, {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 90, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': 50, 'BATTERY CHARGING': False, 'ERROR': None} (0) 15:50:05,651 DEBUG [ReceiverListener:hidraw0] logitech_receiver.notifications: (4.5) DJ notification Notification(2,42,00,0000000000000000000000) 15:50:05,651 DEBUG [MainThread] solaar.ui: status changed: (NONE) None 15:50:05,651 INFO [ReceiverListener:hidraw0] logitech_receiver.notifications: : ignoring DJ connection: Notification(2,42,00,0000000000000000000000) 15:50:05,652 DEBUG [MainThread] solaar.ui.icons: battery icon for 90:False = battery-full 15:50:05,652 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) <= w[10 02 011B 040000] 15:50:05,652 DEBUG [MainThread] solaar.ui.tray: picked device with lowest battery: ('/dev/hidraw0', 1, 'Wireless Mouse MX Master 2S', {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 50, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': 20, 'BATTERY CHARGING': False, 'ERROR': None}) 15:50:05,652 DEBUG [MainThread] solaar.ui.icons: battery icon for 50:False = battery-good 15:50:05,653 DEBUG [MainThread] solaar.ui.icons: battery icon for 90:False = battery-full 15:50:05,655 DEBUG [MainThread] solaar.ui: status changed: (NONE) None 15:50:05,655 DEBUG [MainThread] solaar.ui.icons: battery icon for 90:False = battery-full 15:50:05,655 DEBUG [MainThread] solaar.ui.tray: picked device with lowest battery: ('/dev/hidraw0', 1, 'Wireless Mouse MX Master 2S', {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 50, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': 20, 'BATTERY CHARGING': False, 'ERROR': None}) 15:50:05,655 DEBUG [MainThread] solaar.ui.icons: battery icon for 50:False = battery-good 15:50:05,656 DEBUG [MainThread] solaar.ui.icons: battery icon for 90:False = battery-full 15:50:05,690 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 011B 1D4B0000000000000000000000000000] 15:50:05,691 DEBUG [ReceiverListener:hidraw0] logitech_receiver.notifications: wireless status: Notification(2,04,00,01010100000000000000000000000000) 15:50:05,691 INFO [ReceiverListener:hidraw0] solaar.listener: status_changed : paired online, {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 90, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': 50, 'BATTERY CHARGING': False, 'ERROR': None} (1) powered on 15:50:05,691 DEBUG [ReceiverListener:hidraw0] logitech_receiver.status: : battery 90, discharging 15:50:05,692 DEBUG [MainThread] solaar.ui: status changed: (NOTIFICATION) powered on 15:50:05,692 WARNING [ReceiverListener:hidraw0] logitech_receiver.notifications: : unknown BATTERY Notification(2,07,10,0400C21C0A0000000000000000000000) 15:50:05,693 DEBUG [MainThread] solaar.ui.icons: battery icon for 90:False = battery-full 15:50:05,695 DEBUG [MainThread] solaar.ui.tray: picked device with lowest battery: ('/dev/hidraw0', 1, 'Wireless Mouse MX Master 2S', {'LINK ENCRYPTED': True, 'BATTERY LEVEL': 50, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'BATTERY NEXT LEVEL': 20, 'BATTERY CHARGING': False, 'ERROR': None}) 15:50:05,696 DEBUG [MainThread] solaar.ui.icons: battery icon for 50:False = battery-good 15:50:05,698 DEBUG [MainThread] solaar.ui.icons: battery icon for 90:False = battery-full 15:50:05,699 DEBUG [MainThread] logitech_receiver.base: (21) <= w[10 02 000F 000500] 15:50:05,730 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 000F 03000000000000000000000000000000] 15:50:05,731 DEBUG [MainThread] logitech_receiver.base: (21) => r[11 02 000F 03000000000000000000000000000000] 15:50:05,731 DEBUG [MainThread] logitech_receiver.base: (21) <= w[10 02 030A 000000] 15:50:05,770 DEBUG [MainThread] logitech_receiver.base: (21) => r[11 02 030A 22000000000000000000000000000000] 15:50:05,771 DEBUG [MainThread] logitech_receiver.base: (21) <= w[10 02 031A 000000] 15:50:05,771 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 030A 22000000000000000000000000000000] 15:50:05,812 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 031A 4B38353020506572666F726D616E6365] 15:50:05,812 DEBUG [MainThread] logitech_receiver.base: (21) => r[11 02 031A 4B38353020506572666F726D616E6365] 15:50:05,812 DEBUG [MainThread] logitech_receiver.base: (21) <= w[10 02 0318 100000] 15:50:05,852 DEBUG [MainThread] logitech_receiver.base: (21) => r[11 02 0318 20576972656C657373204B6579626F61] 15:50:05,852 DEBUG [MainThread] logitech_receiver.base: (21) <= w[10 02 0318 200000] 15:50:05,852 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0318 20576972656C657373204B6579626F61] 15:50:05,892 DEBUG [ReceiverListener:hidraw0] logitech_receiver.base: (19) => r[11 02 0318 72640000000000000000000000000000] 15:50:05,893 DEBUG [MainThread] logitech_receiver.base: (21) => r[11 02 0318 72640000000000000000000000000000] ```

pfps commented 4 years ago

Grr, Python, grr. Zero is not false!

@kaechele Should be fixed now.

kaechele commented 4 years ago

Thanks! I have tested it again and can now switch between OS layouts. Changing the OS does affect the assignment of keys so I assume it is working as intended. If you'd like I can also test the use case I described earlier: Using the same receiver with multiple platforms and seeing if the layout is automatically switched to Windows (or maybe in fact whatever I chose last in Solaar) when I boot the Linux machine.

pfps commented 4 years ago

That should work, but it would be good to test. Solaar should force the same layout as the last time the device was visible to Solaar.