pwr-Solaar / Solaar

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

Solaar is empty #531

Closed msdobrescu closed 5 years ago

msdobrescu commented 5 years ago

Hi, I have Sabayon Linux up to date, and Solaar KDE applet/plasmoid in the system tray is empty, although a K800 and a M705 are paired and I receive battery level messages in a very aggressive way when the batteries are almost depleted (this made me opening it to try setting the frequency of these messages, while the power management was triggering them, actually).

image

Lekensteyn commented 5 years ago

Is this the latest version from git master? Solaar as shipped with distributions might be very out of date. If you do have the latest version, start it from the shell with solaar --debug for more diagnostics messages.

tomswartz07 commented 5 years ago

Not OP, but I'm also having the same issue. It seems to trigger most consistantly when the process is background-ed. If it's actively run in a terminal, it usually runs fine, but bg, solaar &, or executing the process from a launcher (dmenu in this case) all result in the problem described in this issue most often.

Running Solaar 0.9.2, built from latest git revision.

Here's the output of the --debug command, while background-ed:

┌──[tom@magrathea]──[9:13:16]
└─▶ ~:% solaar --debug & 
[1] 5368
┌──[tom@magrathea]──[9:13:22]
└─▶ ~:% 09:13:22,338     INFO [MainThread] root: language en_US (UTF-8), translations path None
09:13:22,458     INFO [MainThread] solaar.upower: connected to system dbus, watching for suspend/resume events
09:13:22,612     INFO [MainThread] solaar.listener: starting receiver listening threads
09:13:22,623     INFO [MainThread] solaar.listener: receiver event add DeviceInfo(path='/dev/hidraw3', vendor_id='046d', product_id='c52b', serial='', release=b'1207', manufacturer=b'Logitech', product=b'USB Receiver', interface=2, driver='logitech-djreceiver')
09:13:22,626    ERROR [MainThread] logitech_receiver.receiver: open DeviceInfo(path='/dev/hidraw3', vendor_id='046d', product_id='c52b', serial='', release=b'1207', manufacturer=b'Logitech', product=b'USB Receiver', interface=2, driver='logitech-djreceiver')
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/logitech_receiver/receiver.py", line 531, in open
    return Receiver(handle, device_info)
  File "/usr/lib/python3.7/site-packages/logitech_receiver/receiver.py", line 348, in __init__
    if self.product_id == 'c539' or slef.product_id == 'c53a':
NameError: name 'slef' is not defined
Exception ignored in: <function Receiver.__del__ at 0x7ffbc4bc1400>
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/logitech_receiver/receiver.py", line 370, in __del__
    self.close()
  File "/usr/lib/python3.7/site-packages/logitech_receiver/receiver.py", line 366, in close
    self._devices.clear()
AttributeError: 'Receiver' object has no attribute '_devices'
09:13:22,627  WARNING [MainThread] solaar.listener: failed to open DeviceInfo(path='/dev/hidraw3', vendor_id='046d', product_id='c52b', serial='', release=b'1207', manufacturer=b'Logitech', product=b'USB Receiver', interface=2, driver='logitech-djreceiver')
tomswartz07 commented 5 years ago

Adding some additional context here:

While troubleshooting, I've found an issue with a typo on the latest commit. It's fixed here: #534. I've also applied the latest firmware update for the Unifying receiver (which fwupd was able to see and apply correctly):

Unifying Receiver has firmware updates:
Device ID:               e37c055c03b2862571e22b9b3c44df9c0023363b
GUID:                    9d131a0c-a606-580f-8eda-80587250b8d6
GUID:                    279ed287-3607-549e-bacc-f873bb9838c4
ID:                      com.logitech.Unifying.RQR12.firmware
Update Version:          RQR12.08_B0030
Update Name:             Unifying Receiver Device Update Update
Update Summary:          Firmware for the Logitech Unifying receiver
Update Remote ID:        lvfs
Update Duration:         7 seconds
Update Checksum:         SHA1(8dabc1e0fdd536c13d1e94c637d300f3541d3bf1)
Update Location:         https://fwupd.org/downloads/690feedb8fe9cb05d1eaf80f903d66381eec7200-Logitech-Unifying-RQR12.08_B0030.cab
Update Description:      This release addresses an encrypted keystroke injection issue known as Bastille security issue #13. The vulnerability is complex to replicate and would require a hacker to be physically close to a target.

                         A few of Logitech's devices used to send select buttons in an unencrypted way, and in an effort to protect against this vulnerability, Logitech removed the feature. Affected hardware is:

                          • Wireless Mouse M335
                          • Zone Touch Mouse T400
                          • Wireless Mouse M545
                          • Wireless Mouse M560
                          • Touch Mouse M600
                          • Touch Mouse T620
                          • Wireless Rechargeable Touchpad T650

                         Although Logitech does not recommend it, these features may be re-activated by keeping/downgrading the receiver to an older firmware.                     

Despite both of these changes, solaar still does not seem to recognize the receiver properly, unless it's unplugged and replugged continually.

gisforgirard commented 5 years ago

have you tried running rules.d/install.sh ? that helped for me at least once

tomswartz07 commented 5 years ago

I have. The udev rules exist on my system.

rsvensson commented 5 years ago

I have the same issue as OP, and changing the typo in receiver.py fixed it for me.

However I didn't have the issue where it was working in the terminal but not when backgrounded. It didn't work either way for me. After correcting the typo it finds the receiver immediately on startup. So that might be a separate issue.

msdobrescu commented 5 years ago

Hello, you can find here the Sabayon info on the provided package: https://packages.sabayon.org/quicksearch?q=solaar&x=0&y=0

msdobrescu commented 5 years ago

Run with '--debug' displays one device only: Screenshot_20190725_190056 ...despite reports both paired (the K800 is missing): Screenshot_20190725_191527 Here is the log: solaar.log

msdobrescu commented 5 years ago

Hello, one of Sabayon team members found the reason: python version. python2.7 /usr/bin/solaar works.

Enlik commented 5 years ago

Hello!

Relevant log parts from @msdobrescu:

  File "/usr/lib64/python3.6/site-packages/logitech_receiver/settings.py", line 297, in prepare_write
    b = ord(to_write[i])
TypeError: ord() expected string of length 1, but int found

and (looks like #468)

  File "/usr/lib64/python3.6/site-packages/logitech_receiver/notifications.py", line 130, in _process_hidpp10_custom_notification
    if n.sub_id == _R.illumination:
AttributeError: 'NamedInts' object has no attribute 'illumination'

hope it helps.

Enlik commented 5 years ago

Oh and version is 0.9.2.

mfulz commented 5 years ago

Adding some additional context here:

While troubleshooting, I've found an issue with a typo on the latest commit. It's fixed here: #534. I've also applied the latest firmware update for the Unifying receiver (which fwupd was able to see and apply correctly):

Unifying Receiver has firmware updates:
Device ID:               e37c055c03b2862571e22b9b3c44df9c0023363b
GUID:                    9d131a0c-a606-580f-8eda-80587250b8d6
GUID:                    279ed287-3607-549e-bacc-f873bb9838c4
ID:                      com.logitech.Unifying.RQR12.firmware
Update Version:          RQR12.08_B0030
Update Name:             Unifying Receiver Device Update Update
Update Summary:          Firmware for the Logitech Unifying receiver
Update Remote ID:        lvfs
Update Duration:         7 seconds
Update Checksum:         SHA1(8dabc1e0fdd536c13d1e94c637d300f3541d3bf1)
Update Location:         https://fwupd.org/downloads/690feedb8fe9cb05d1eaf80f903d66381eec7200-Logitech-Unifying-RQR12.08_B0030.cab
Update Description:      This release addresses an encrypted keystroke injection issue known as Bastille security issue #13. The vulnerability is complex to replicate and would require a hacker to be physically close to a target.

                         A few of Logitech's devices used to send select buttons in an unencrypted way, and in an effort to protect against this vulnerability, Logitech removed the feature. Affected hardware is:

                          • Wireless Mouse M335
                          • Zone Touch Mouse T400
                          • Wireless Mouse M545
                          • Wireless Mouse M560
                          • Touch Mouse M600
                          • Touch Mouse T620
                          • Wireless Rechargeable Touchpad T650

                         Although Logitech does not recommend it, these features may be re-activated by keeping/downgrading the receiver to an older firmware.                     

Despite both of these changes, solaar still does not seem to recognize the receiver properly, unless it's unplugged and replugged continually.

Could you try the sleep workaournd, I've added to: https://github.com/pwr-Solaar/Solaar/issues/537

Had the same issue: Receiver wasn't recognized since some update.

msdobrescu commented 5 years ago

Launching it with python 2.7, I have a new issue: first it starts, has the devices listed. After a while, the keyboard being wireless, goes in sleep mode. It is displayed as disabled in Solaar. At the first key pressed, the list is emptied and Solaar looks empty again.

21:42:28,759 ERROR [ReceiverListener:hidraw0] logitech_receiver.base: write failed, assuming handle 4 no longer available 21:42:28,759 ERROR [ReceiverListener:hidraw0] logitech_receiver.listener: processing Notification(2,41,04,B11020) Traceback (most recent call last): File "/usr/lib64/python2.7/site-packages/logitech_receiver/listener.py", line 185, in run self._notifications_callback(n) File "/usr/lib64/python2.7/site-packages/solaar/listener.py", line 207, in _notifications_handler _notifications.process(dev, n) File "/usr/lib64/python2.7/site-packages/logitech_receiver/notifications.py", line 54, in process return _process_device_notification(device, status, notification) File "/usr/lib64/python2.7/site-packages/logitech_receiver/notifications.py", line 97, in _process_device_notification return _process_hidpp10_notification(device, status, n) File "/usr/lib64/python2.7/site-packages/logitech_receiver/notifications.py", line 174, in _process_hidpp10_notification status.changed(active=link_established) File "/usr/lib64/python2.7/site-packages/logitech_receiver/status.py", line 255, in changed self[KEYS.NOTIFICATION_FLAGS] = d.enable_notifications() File "/usr/lib64/python2.7/site-packages/logitech_receiver/receiver.py", line 270, in enable_notifications ok = _hidpp10.set_notification_flags(self, set_flag_bits) File "/usr/lib64/python2.7/site-packages/logitech_receiver/hidpp10.py", line 328, in set_notification_flags result = write_register(device, REGISTERS.notifications, _int2bytes(flag_bits, 3)) File "/usr/lib64/python2.7/site-packages/logitech_receiver/hidpp10.py", line 149, in write_register return device.request(request_id, value) File "/usr/lib64/python2.7/site-packages/logitech_receiver/receiver.py", line 281, in request return _base.request(self.receiver.handle, self.number, request_id, params) File "/usr/lib64/python2.7/site-packages/logitech_receiver/base.py", line 340, in request write(ihandle, devnumber, request_data) File "/usr/lib64/python2.7/site-packages/logitech_receiver/base.py", line 171, in write raise NoReceiver(reason=reason) NoReceiver: {'reason': OSError(32, 'Broken pipe')} 21:42:28,761 ERROR [ReceiverListener:hidraw0] logitech_receiver.base: read failed, assuming handle 4 no longer available 21:42:28,761 WARNING [ReceiverListener:hidraw0] logitech_receiver.listener: receiver disconnected 21:42:28,761 INFO [ReceiverListener:hidraw0] solaar.listener: <UnifyingReceiver(/dev/hidraw0,4)>: notifications listener has stopped 21:42:36,362 INFO [MainThread] solaar.ui.notify: stopping desktop notifications 21:42:36,382 INFO [MainThread] solaar.configuration: saved {u'2010:FFC65665': {u'fn-swap': False, u'hand-detection': True, u'_name': u'Wireless Illuminated Keyboard K800'}, u'_version': u'0.9.2', u'101B:7C44B18E': {u'side-scroll': True, u'smooth-scroll': False, u'_name': u'Marathon Mouse M705'}} to /home/user/.config/solaar/config.json

mfulz commented 5 years ago

Have you tried that with my pull request included?

msdobrescu commented 5 years ago

Have you tried that with my pull request included?

No.

mfulz commented 5 years ago

21:42:28,759 ERROR [ReceiverListener:hidraw0] logitech_receiver.base: write failed, assuming handle 4 no longer available This is exactly the error, my pullrequest ist trying to address (broken pipe). If you could give it a try it would be great.

msdobrescu commented 5 years ago

I've tried it, but I lose the mouse and the keyboard completely. I've had to plug some non unifier mouse and keyboard in order to forcibly close Solaar.

tomswartz07 commented 5 years ago

@FFY00 I just tried https://github.com/pwr-Solaar/Solaar/commit/155e2f8c4066b1061fd9151563f9b1c7095f72b9 and it's significantly worse now.

The mouse is not detected at all (even after hot-plugging the unifying receiver).

FFY00 commented 5 years ago

I'll send a patch in a second. I'll @ to verify it works.