Как переместить панель KDE Plasma с помощью командной строки/скриптов?

Вопрос или проблема

У меня есть скрипт, который изменяет макет моего рабочего стола с помощью 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, вы успешно переместите вашу панель на нужный экран. Если у вас остались вопросы или возникли сложности, пожалуйста, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...