diff --git a/lib/logitech_receiver/settings_templates.py b/lib/logitech_receiver/settings_templates.py index 810d12a0..d820de76 100644 --- a/lib/logitech_receiver/settings_templates.py +++ b/lib/logitech_receiver/settings_templates.py @@ -1222,8 +1222,8 @@ def check_feature_settings(device, already_known): def check_feature_setting(device, setting_name): - for setting in SETTINGS: - if setting.name == setting_name: - feature = check_feature(device, setting) - if feature: - return feature + for sclass in SETTINGS: + if sclass.feature and sclass.name == setting_name and device.features: + setting = check_feature(device, sclass) + if setting: + return setting diff --git a/lib/solaar/cli/config.py b/lib/solaar/cli/config.py index 6721f952..55e21656 100644 --- a/lib/solaar/cli/config.py +++ b/lib/solaar/cli/config.py @@ -172,9 +172,15 @@ def run(receivers, args, find_receiver, find_device): setting_name = args.setting.lower() setting = _settings_templates.check_feature_setting(dev, setting_name) + if not setting and dev.descriptor and dev.descriptor.settings: + for sclass in dev.descriptor.settings: + if sclass.register and sclass.name == setting_name: + try: + setting = sclass.build(dev) + except Exception: + setting = None if setting is None: raise Exception("no setting '%s' for %s" % (args.setting, dev.name)) - _configuration.attach_to(dev) if args.value_key is None: setting.apply()