Я пытаюсь создать виджет в KDE Plasma, который позволит мне быстро подключить диск через rClone. Это означает, что на панели задач у меня есть значок, с помощью которого я могу выбрать, какие диски монтировать. Однако я не нашел способа выполнить команду bash из файла QLM.
Что у меня есть: У меня есть команда bash, которая монтирует папку OneDrive с помощью rClone.
// Example:
rclone mount remote:path/to/files /path/to/local/mount
Что я хочу: Я хочу создать ярлык (желательно на панели задач, например виджет KDE), по которому я могу щелкнуть, чтобы запустить указанную команду (монтировать).
Что я пробовал: Я создал виджет, который добавил на панель задач. У него есть кнопка, которая должна запускать указанную команду (как показано ниже).
PlasmaComponents.Button {
text: i18n("Mount")
onClicked: ???
}
Проблема: Вот где я застрял. Как я могу выполнить команду bash при нажатии кнопки в виджете Plasma (написанном в QLM)? Есть ли какая-нибудь библиотека/плагин/API для этого? Или есть совершенно другой способ добиться этого или чего-то подобного?
См. Руководство по редактору меню KDE. Вы также можете использовать kdialog
для отображения диалогового окна KDE («Да», «Нет», «Отмена» и т. д.), которое будет делать то, что вы хотите.
@DavidC.Rankin Спасибо, что указали мне на kmenuedit и kdialog, я определенно смогу ими воспользоваться.
Рад, что это помогло! Я использую KDE уже более 20 лет и обычно просто думаю о простом способе сделать что-то :)
. Приятно осознавать, что подход QLM также будет работать, хотя, признаться, я еще не рискнул в него вникать. Удачи вам в написании сценариев. (всегда не забывайте вставлять все скрипты в ShellCheck, чтобы ничего не пропустить). Это фантастический инструмент, который весьма полезен даже для тех, кто пишет сценарии десятилетиями.
Спасибо за предложение ShellCheck, я проверю! Я новичок как в QLM, так и в написании сценариев Shell, поэтому думаю, что это мне очень поможет.
Дэвид К.Ранкин указал мне на kmenuedit (и kdialog), который является более простым способом достижения этой цели. Однако я также нашел ответ на свой первоначальный вопрос:
На другом сайте пользователь предоставил мне ответ, которым я хочу поделиться здесь. Действительно, можно запускать команды bash из виджетов QLM:
Предполагая, что вы используете Plasma 6, вы сможете сделать это через "Источник данных".
Если вы посмотрите на код Toggle Обзор виджета для Plasma 6, когда вы перейдете к коду, вы увидите, как он используется. у меня есть на самом деле я сам использовал соответствующий код для одного из своих собственных модифицированных виджеты.
Что вам нужно сделать, это импортировать org.kde.plasma.plasma5support как Plasma5Support, а затем настройте Plasma5Support.DataSource оттуда. (проверьте код, на момент написания статьи он должен быть из строк 81–92 этот). Если вы используете код оттуда, вы сможете использовать следующее:
executable.exec('bash command goes here');
Вы также можете поместить exec в функцию, а затем вызвать эту функцию. при нажатии кнопки.
(Из Reddit)
Подводя итог: вам нужно
import org.kde.plasma.plasma5support as Plasma5Support
а затем добавьте кнопку и источник данных в виджет:
PlasmaComponents.Button {
text: i18n("Execute")
onClicked: executable.exec('bash_code_here')
}
Plasma5Support.DataSource {
id: executable
engine: "executable"
connectedSources: []
onNewData: function(source, data) {
disconnectSource(source)
}
function exec(cmd) {
executable.connectSource(cmd)
}
}
Альтернативно вы также можете выполнить файл сценария:
onClicked: executable.exec('bash /path/to/yourscript')
Почему QLM? Почему бы просто не написать сценарий, сохранить его как текстовый файл (включая
#!/bin/bash
), сделать его исполняемым (chmod 0755 /path/to/yourscript
), а затем создать значок (файл.desktop
), используяkmenuedit
, который использует ваш сценарий в качестве исполняемого файла, а затем просто поместить значок приложения в панели задач? Вы даже можете включить диалоги из своего скрипта, используяkdialog
, чтобы предоставить диалоговое окно подтверждения, показывающее успешное монтирование, и т. д.