Автор Тема: Создание хоткея для скрипта  (Прочитано 816 раз)

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Еще раз здравствуйте.
Сразу скажу, что в начале проблем не возникало, и все работало.
Создал скрипт: fortest
Далее: chmod a+x fortest
Далее поместил fortest в /usr/bin/
Создал пункт меню тест и назначил ему хоткей. Все заработало. Но потом поменял файл, вроде бы делаю всю туже последовательность действий, но не работает.

Скрипт:
#!/bin/bash

qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript "
    var allDesktops = desktops();
    print (allDesktops);
    for (i=0;i<allDesktops.length;i++) {
        d = allDesktops[i];
        d.wallpaperPlugin = 'org.kde.image';
        d.currentConfigGroup = Array('Wallpaper',
                                    'org.kde.image',
                                    'General');
        d.writeConfig('Image', 'file:///home/user/oboi.jpg')
    }"

При этом если его запускаешь из под рута, то пишет, что не может найти org.kde.PlasmaShell.evaluateScript для /PlasmaShell. Но это так и должно быть, как я понимаю. Прошлый раз хоткей работал.

Как правильно создать хоткей?! :-[

Чувствую, что где-то какая-то заноза просто сидит...
« Последнее редактирование: 24.12.2022 13:39:31 от Cl.Magenta »

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #1 : 24.12.2022 13:28:11 »
Попробовал создать простой скрипт с :
/usr/lib/kf5/bin/kwrite
Хоткей на него тоже не работает.

dango_

  • Гость
Re: Создание хоткея для скрипта
« Ответ #2 : 24.12.2022 15:39:15 »
Но потом поменял файл, вроде бы делаю всю туже последовательность действий, но не работает.
Какой файл поменяли? Что изменили? Подробнее излагайте ход ваших действий.
Если что-то идет не так как до этого, попробуйте начать все сначала, фиксируя результаты на каждом шагу.
Попробовал создать простой скрипт с :
/usr/lib/kf5/bin/kwrite
Хоткей на него тоже не работает.
В Live стартеркита с KDE состряпал скрипт с вызовом kwrite, запихал в /usr/bin, сделал исполняемым, в редакторе меню KDE добавил новый пункт с вызовом скрипта, повесил на него хоткей. Проверил - работает.
Что-то делаете не так. Проверяйте свои ходы.

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #3 : 24.12.2022 15:46:18 »
Какие разрешения вы даете файлу? chmod a+x? Хотя я и другие пробовал. Вряд ли это как-то может влиять.
« Последнее редактирование: 24.12.2022 15:57:11 от Cl.Magenta »

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #4 : 24.12.2022 15:55:32 »
1. Создал у себя в домашней папке файл bloknot:
#!/bin/bash
/usr/lib/kf5/bin/kwrite
2. Сделал его исполняемым: chmod а+x bloknot :
ls -l
-rwxr-xr-x 1 user user 38 дек 24 15:47 bloknot
И проверил на запуск.
3. Зашел под su - .
4. Скопировал bloknot в /usr/bin/
5. Создал в меню пункт: bloknot ; указал путь: /usr/bin/bloknot
6. Привязал в глобальных комбинациях клавиш сочетание Ctrl+K

Не работает.

Оффлайн antsiest

  • Начинающий
  • *
  • Сообщений: 22
Re: Создание хоткея для скрипта
« Ответ #5 : 24.12.2022 17:05:01 »
Гляньте на нижнее решение по обоям
https://superuser.com/a/1575609
« Последнее редактирование: 24.12.2022 17:07:21 от antsiest »

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #6 : 24.12.2022 17:19:22 »
Да, спасибо: чем больше способов решения, тем лучше.
Но эта тема посвящена вопросу создания хоткея. Мне все-таки интересно, как назначать горячие сочетания клавиш. Это опция полезная сама по себе, но пока, почему-то, не работает.

dango_

  • Гость
Re: Создание хоткея для скрипта
« Ответ #7 : 24.12.2022 19:27:18 »
1. Создал у себя в домашней папке файл bloknot:
Код: [Выделить]
#!/bin/bash
/usr/lib/kf5/bin/kwrite
2. Сделал его исполняемым: chmod а+x bloknot :
Код: [Выделить]
ls -l
-rwxr-xr-x 1 user user 38 дек 24 15:47 bloknot
И проверил на запуск.
3. Зашел под su - .
4. Скопировал bloknot в /usr/bin/
5. Создал в меню пункт: bloknot ; указал путь: /usr/bin/bloknot
6. Привязал в глобальных комбинациях клавиш сочетание Ctrl+K
Да, по сути все то же самое.
su -
echo -e '#!/bin/bash\n/usr/lib/kf5/bin/kwrite' > /usr/bin/kw
chmod a+x /usr/bin/kw
Редактор меню KDE - Добавить пункт
На вкладке "Основные параметры":
Название = KW
Команда = /usr/bin/kw
На вкладке "Дополнительно":
Текущая клавиша = Ctrl + K
Сохранить
---
В моем случае работает.

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #8 : 24.12.2022 19:52:39 »
Самое интересное в том, что вчера один раз сработало... Повторил Ваш способ: не помогает.
Судя по зловещему молчанию, начинаю подозревать, что дело в моем ноутбуке. ?

dango_

  • Гость
Re: Создание хоткея для скрипта
« Ответ #9 : 25.12.2022 05:41:15 »
Повторил Ваш способ: не помогает.
Как выглядит это? Чем меньше вы делитесь информацией - тем меньше интереса проявят к вашим вопросам.
Сам скрипт выполняется из терминала? А из меню KDE?

Оффлайн trs

  • Давно тут
  • **
  • Сообщений: 284
Re: Создание хоткея для скрипта
« Ответ #10 : 25.12.2022 06:15:01 »
Дело не в ноутбуке. Дело в том, что скрипт при решении задачи "изменить обои при нажатии на кнопку" - лишняя сущность. Попробую объяснить.

Не работать скрипт может по различным причинам:
а) не запускается скрипт;
б) ошибка в скрипте;
в) вызов qdbus завершается ошибкой;
...
ы) Луна изменила траекторию движения альфа-частицы и та вызвала сбой в процессоре.

Как их различить? Добавить отладочный вывод в скрипт. Перед строкой qdbus. Например, команда echo может что-то записать в файл /tmp/hotkey. Но сначала следует проверить такую echo из командной строки. Потом можно проверить, работает ли qdbus, перенаправив её вывод в тот же файл (т.е. добавить >> /tmp/hotkey). Сложно?

Можно пойти обратным путём, от простого к сложному.
Сначала в командной строке протестировать непосредственно команду, от которой ожидается результат:
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript " \
    var allDesktops = desktops(); \
    print (allDesktops); \
    for (i=0;i<allDesktops.length;i++) { \
        d = allDesktops[i]; \
        d.wallpaperPlugin = 'org.kde.image'; \
        d.currentConfigGroup = Array('Wallpaper', \
                                    'org.kde.image', \
                                    'General'); \
        d.writeConfig('Image', 'file:///home/user/oboi.jpg') \
    }"
Понажимать клавиши «вверх» и «ввод». Возможно, при повторном исполнении выдаст что-то новое? (нет KDE под рукой).

Поскольку повторно вводить это долго, раньше копировали команду в скрипт. Теперь скрипт лишь добавляет лишние точки отказа. Достаточно скопировать эту команду в поле «Команда =», куда писали имя скрипта. Я надеюсь, поместится в поле. Иначе передавайте мои поздравления архитектору системы.

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #11 : 25.12.2022 12:04:37 »
Не работать скрипт может по различным причинам:
в) вызов qdbus завершается ошибкой;
...
Вообще, я думал об этом. Дело в том, что не срабатывает любой скрипт: не только вызывающий qdbus, но и скрипт с вызовом /usr/lib/kf5/bin/kwrite тоже не срабатывает. При этом, если эти скрипты, помещенные в /usr/bin/ запускаешь из под пользователя, то они работают нормально, но если их запускаешь из под root, они тоже срабатывают, но выдают некое сообщение. К примеру запуск /usr/lib/kf5/bin/kwrite из под su выдает такое сообщение:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/.private/root/runtime-root'
Может ли быть это сообщение причиной несрабатывания хоткея?
При этом kwrite все равно запускается.
Надо попробовать написать какой-то скрипт, который не будет выдавать никаких сообщений при запуске из под su, и создать для него хоткей.

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #12 : 25.12.2022 12:11:49 »
Так. Похоже проблема в каких-то политиках. Попробовал запустить /usr/bin/microsoft-edge из под su : скрипт вообще не запускается. Я плохо понимаю, как это в Linux устроено. На Виндовс без разницы из под кого ты программу запускаешь, если все разрешения указаны. А тут, похоже, какой-то другой принцип.

Теперь выяснилось следующее:
Хоткей на браузер Edge работает. Но если создаешь пункт меню с указанием на /usr/bin/microsoft-edge, то хоткей на него не работает.
Похоже, что проблема именно с запуском скриптов из под su.
« Последнее редактирование: 25.12.2022 12:31:22 от Cl.Magenta »

Оффлайн Cl.Magenta

  • Давно тут
  • **
  • Сообщений: 104
Re: Создание хоткея для скрипта
« Ответ #13 : 25.12.2022 12:25:18 »
Сам скрипт выполняется из терминала? А из меню KDE?

Еще раз: скрипт kw находится в папке /usr/bin/kw
Из под юзера скрипт запускается. Из под su тоже запускается, но выдает сообщение:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/.private/root/runtime-root'
Из меню скрипт тоже запускается. Все работает, кроме хоткея.

dango_

  • Гость
Re: Создание хоткея для скрипта
« Ответ #14 : 25.12.2022 12:52:45 »
При этом, если эти скрипты, помещенные в /usr/bin/ запускаешь из под пользователя, то они работают нормально, но если их запускаешь из под root, они тоже срабатывают, но выдают некое сообщение. К примеру запуск /usr/lib/kf5/bin/kwrite из под su выдает такое сообщение:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/.private/root/runtime-root'
Зачем вы запускаете пользовательские программы под root? Права root не для этого предназначены, а только для административных задач.
Если хотите угробить систему, это самый верный путь.
К примеру запуск /usr/lib/kf5/bin/kwrite из под su выдает такое сообщение:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/.private/root/runtime-root'
Все правильно говорит. Переменные окружения для пользовательских приложений не установлены.
Может ли быть это сообщение причиной несрабатывания хоткея?
Нет.
Надо попробовать написать какой-то скрипт, который не будет выдавать никаких сообщений при запуске из под su, и создать для него хоткей.
Зачем?!!!
Так. Похоже проблема в каких-то политиках. Попробовал запустить /usr/bin/microsoft-edge из под su : скрипт вообще не запускается. Я плохо понимаю, как это в Linux устроено. На Виндовс без разницы из под кого ты программу запускаешь, если все разрешения указаны. А тут, похоже, какой-то другой принцип.
Нормальный принцип, правильный. Пользователю - пользовательское, администратору - административное. И в винде такое тоже можно настроить. А вот все подряд запускать под административными правами, как я уже выше писал, это плохая практика и дорога к переустановке системы.