#linux #ubuntu #bash
Хотелось бы, чтоб всякие фоновые приложения, вроде серверов, запускались на отдельно отведённом для них рабочем месте. Можно ли так сделать?
Ответы
Ответ 1
Управление положением окон на рабочих столах в большинстве WM реализовано согласно этой freesesktop'овыской спецификации. На основе оной спеки существует консольная утилитка wmctrl. API самой спецификации не содержит чего-либо похожего на «запустить X на рабочем столе N», так что я вижу два варианта: Переключиться на рабочий стол N1 и запустить приложение: wmctrl -s 1 && xterm Запомнить список окон → запустить приложение → когда появится новое окно перенести его на рабочий стол N; это потребует небольшого скрипта и не совсем надёжно, если приложение создаёт несколько окон или окно приветствия. ⚠ Осторожно, дальше разбросаны граблевидные костыли. #!/usr/bin/env bash [[ "$#" -lt 2 ]] && { echo "Usage: $0[arg] ..." exit 1 } getWinIdList(){ wmctrl -l | sed 's/\s.*//' } DESKTOP=$1 shift WL="$(getWinIdList)" #run the process "$@" & # Loop up to 20 seconds and wait for new window apperence i=0 while [[ "$((i++))" -lt 200 ]]; do newWL="$(getWinIdList)" # check if there are new windows wins=$(diff <(echo -n "$WL") <(echo -n "$newWL") | sed -n '/^>/p') [[ -n "$wins" ]] && break sleep 0.1 || break done # if new windows were detected, move them. if [[ -n "$wins" ]]; then for w in $wins; do wmctrl -ir "$w" -t "$DESKTOP" done else echo "The timeout expired no new windows detected." fi Запуск: runOnDesktop.sh 1 xterm Вообще говоря, я не думаю, что существует способ (DE/WM/платформо-зависимый или нет) как-либо надёжно заставить произвольное приложение запускать все свои окна на каком-либо столе исходя просто из того факта, как утроено взаимодействие процессов, оконного менеджера и X11. ¹ Рабочие столы отсчитываются с нулевого Ответ 2
Если вы зайдете по ssh и запустите DISPLAY=:0 /home/user/app.sh то приложение откроется на мониторе, если таковой имеется, мне кажется по аналогии можно решить и ваш вопрос
Комментариев нет:
Отправить комментарий