Вопрос или проблема
У меня есть скрипт, который изменяет макет моего рабочего стола с помощью xrandr
, но я также хочу переместить свою панель.
Пока я экспериментировал с kwinscripts, используя
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.showInteractiveConsole
Когда я перемещаю панель мышью, значение panel.screen меняется между 0 и 2, но строка скрипта panel.screen = 2
не устанавливает его на 2, оно остается прежним, а panel.location='bottom'
работает нормально.
var panel = panelById(panelIds[0])
print('before, panel.screen: ');
print(panel.screen);
panel.screen=2;
//panel.location='top';
panel.location='bottom';
print('after, panel.screen: ');
print(panel.screen);
Почему panel.screen=2;
не работает?, и что еще я могу сделать, чтобы ее переместить?
Возможно, значение panel.screen является только для чтения и не может быть изменено через метод kwinscripts. Вы могли бы попробовать использовать команду qdbus, чтобы переместить панель:
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'var panel = panelById(panelIds[0]); panel.geometry = QRect(0, 0, screenGeometry(2).width, panel.preferredSize.height);'
Эта команда устанавливает геометрию панели в соответствии с шириной экрана 2, что эффективно перемещает ее вниз по экрану. Вы можете отрегулировать значения в функции QRect(), чтобы переместить панель в другое место на экране.
Ответ или решение
Для перемещения панели KDE Plasma с помощью командной строки или скриптов, действительно может возникнуть проблема с тем, что значение panel.screen
является только для чтения. Однако, вы можете использовать подход, основанный на изменении геометрии панели. Ниже я приведу подробное решение этой задачи.
Шаг 1: Определение идентификатора панели
Сначала вам нужно узнать идентификатор панели, которую вы хотите переместить. Вы можете использовать команду qdbus
, чтобы получить список панелей и их идентификаторов:
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.panelIds
Этот запрос вернет массив идентификаторов панелей. Запишите нужный идентификатор, который вы будете использовать в следующем шаге.
Шаг 2: Перемещение панели с помощью qdbus
Теперь вы можете переместить панель на нужный экран, изменив её геометрию. Чтобы сделать это, выполните следующую команду, заменив panelId
на фактический идентификатор панели, а также screenNumber
на номер экрана (например, 0, 1 или 2).
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'var panel = panelById("panelId"); panel.geometry = QRect(screenGeometry(screenNumber).x, screenGeometry(screenNumber).y, screenGeometry(screenNumber).width, panel.preferredSize.height);'
Пример: Если вы хотите переместить панель на экран 2, и идентификатор панели равен panel1
, команда будет выглядеть так:
qdbus org.kde.plasmashell /PlasmaShell org.kde.PlasmaShell.evaluateScript 'var panel = panelById("panel1"); panel.geometry = QRect(0, 0, screenGeometry(2).width, panel.preferredSize.height);'
Шаг 3: Запуск скрипта
Вы можете сохранить этот код в файл, например move_panel.sh
, сделать его исполняемым и запустить:
chmod +x move_panel.sh
./move_panel.sh
Объяснение работы кода
panel.geometry
: Свойство, которое изменяет геометрию (размер и положение) панели.QRect(x, y, width, height)
: Объект, представляющий прямоугольник, гдеx
иy
— это верхний левый угол, аwidth
иheight
— размеры.screenGeometry(screenNumber)
: Функция, возвращающая геометрию указанного экрана, позволяя использовать координаты экрана для корректного размещения панели.
Заключение
Таким образом, используя комбинацию команд qdbus
и JavaScript в Plasma Shell, вы успешно переместите вашу панель на нужный экран. Если у вас остались вопросы или возникли сложности, пожалуйста, не стесняйтесь задавать их.