notify in case of permissions problem on the hidraw device
This commit is contained in:
parent
6590e9ed2d
commit
5c38c33374
|
|
@ -83,7 +83,11 @@ if __name__ == '__main__':
|
||||||
global listener, notify_missing
|
global listener, notify_missing
|
||||||
|
|
||||||
if listener is None:
|
if listener is None:
|
||||||
|
try:
|
||||||
listener = ReceiverListener.open(status_changed)
|
listener = ReceiverListener.open(status_changed)
|
||||||
|
except OSError:
|
||||||
|
ui.show_permissions_warning(window)
|
||||||
|
|
||||||
if listener is None:
|
if listener is None:
|
||||||
pairing.state = None
|
pairing.state = None
|
||||||
if notify_missing:
|
if notify_missing:
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,16 @@ def icon_file(name):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def show_permissions_warning(window):
|
||||||
|
text = ('Found a possible Unifying Receiver device,\n'
|
||||||
|
'but did not have permission to open it.')
|
||||||
|
|
||||||
|
m = Gtk.MessageDialog(window, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, text)
|
||||||
|
m.set_title('Permissions error')
|
||||||
|
m.run()
|
||||||
|
m.destroy()
|
||||||
|
|
||||||
|
|
||||||
def find_children(container, *child_names):
|
def find_children(container, *child_names):
|
||||||
assert container is not None
|
assert container is not None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,10 +120,7 @@ def open_path(device_path):
|
||||||
|
|
||||||
:returns: an opaque device handle, or ``None``.
|
:returns: an opaque device handle, or ``None``.
|
||||||
"""
|
"""
|
||||||
try:
|
|
||||||
return _os.open(device_path, _os.O_RDWR | _os.O_SYNC)
|
return _os.open(device_path, _os.O_RDWR | _os.O_SYNC)
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def close(device_handle):
|
def close(device_handle):
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
from struct import pack as _pack
|
from struct import pack as _pack
|
||||||
from struct import unpack as _unpack
|
from struct import unpack as _unpack
|
||||||
|
import errno as _errno
|
||||||
|
|
||||||
|
|
||||||
from . import base as _base
|
from . import base as _base
|
||||||
|
|
@ -164,10 +165,22 @@ class Receiver(object):
|
||||||
|
|
||||||
:returns: An open file handle for the found receiver, or ``None``.
|
:returns: An open file handle for the found receiver, or ``None``.
|
||||||
"""
|
"""
|
||||||
|
exception = None
|
||||||
|
|
||||||
for rawdevice in _base.list_receiver_devices():
|
for rawdevice in _base.list_receiver_devices():
|
||||||
|
exception = None
|
||||||
|
try:
|
||||||
handle = _base.try_open(rawdevice.path)
|
handle = _base.try_open(rawdevice.path)
|
||||||
if handle:
|
if handle:
|
||||||
return Receiver(handle, rawdevice.path)
|
return Receiver(handle, rawdevice.path)
|
||||||
|
except OSError as e:
|
||||||
|
_log.exception("open %s", rawdevice.path)
|
||||||
|
if e.errno == _errno.EACCES:
|
||||||
|
exception = e
|
||||||
|
|
||||||
|
if exception:
|
||||||
|
# only keep the last exception
|
||||||
|
raise exception
|
||||||
|
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue