Как запустить приложение в другом рабочем пространстве?

13

Мне нужно запустить приложение с графическим интерфейсом [Lotus Symphony] в рабочей области, отличной от используемой в данный момент. [пример: на рабочем столе GNOME есть 4 рабочих пространства.]

Q: Как мне это сделать?

ps: это необходимо, потому что первый запуск Lotus Symphony после перезагрузки очень, очень медленный, но после однократного использования он запускается очень быстро. Я думаю, что это кеширует себя. Вот почему я хочу запускать его при каждой загрузке в другом рабочем пространстве, поэтому будет быстрее, если мне понадобится его использовать.

LanceBaynes
источник
Полагаю, было бы полезно узнать, какую ОС и какую версию GNOME вы используете.
энзотиб
Ubuntu 10.04 - gnome-desktop-data 1: 2.30.2-0ubuntu1
LanceBaynes

Ответы:

8

Проверьте Devil's Pie (хотя я не уверен, что он будет работать с Gnome3), и вы можете найти более полезную информацию о bash stackoverflow .

В основном вы должны сделать следующее:

#!/bin/bash
wmctrl -n 8

firefox &
thunderbird &
/usr/bin/netbeans --locale en &
amsn &
gnome-terminal &
sleep 15

wmctrl -r firefox -t 0
wmctrl -r netbeans -t 1 
wmctrl -r terminal -t 2 
wmctrl -r amsn -t 6 
wmctrl -r thunderbird -t 7

#focus on terminal
wmctrl -a terminal 

(Я просто скопировал и вставил приведенный выше код из ссылки StackOverFlow выше, так как я думаю, что это само за себя).

ОБНОВИТЬ:

Смотрите здесь для более простого решения на лучшем сайте для расширений Gnome 3, вы должны установить расширение Auto Move Windows для Gnome 3. Если это не работает для вас (как вы можете видеть по ссылке, есть некоторые дистрибутивы, которые автоматизация установки не работает должным образом, ознакомьтесь с более подробной информацией о том, как заставить ее работать.

Ханан Н.
источник
2

В первоначальном посте речь шла об использовании сценария для отображения приложения в определенной рабочей области, так что в сценарии запуска можно использовать другой сценарий, чтобы позволить пользователю продолжить работу, пока приложение загружается очень медленно в другой рабочей области. Мой сценарий прекрасно работает в качестве внешнего интерфейса для довольно громоздкого синтаксиса wmctrl, позволяющего запускать любое приложение в любом заданном рабочем пространстве из любой командной строки. Таким образом, дальнейший сценарий, который просто перечисляет что-то вроде, lh 1 thunderbird; lh 2 firefox; lh 3 calculator.... или что-то еще, теперь легко. Однако есть некоторые трудности со временем, поэтому сон в моем сценарии. Ниже приведена обновленная версия, которую я не буду поддерживать или публиковать снова. Используйте как есть, нет гарантии пригодности для любого конкретного использования. Измените, как вам угодно. Я предлагаю сохранить как /usr/local/bin/lh, просто потому чтоlh это не какое-либо другое известное имя программы, по крайней мере, не в Mint 18. Что касается переменных - я цитировал переменные, которые я счел необходимым заключить в кавычки.

#!/bin/sh
## Author: B.A. Computer Services www.ba-computer.com
## Purpose: Frontend to launch anything on a specific desktop/workspace.
##  lh is short for LaunchHere

USAGE="USAGE: $(basename $0) [-r] workspace(1,2,..) command\
    LaunchHere launches COMMAND on specific workspace.\
    -r option returns to current workspace"
[ -z "$1" ] && echo $USAGE && exit 0
ISRETURN=$(false); [ "$1" = "-r" ] && ISRETURN=true && shift;  
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
WSN=$(expr $WRKSPC - 1)  ## wmctrl starts with 0 as first wrkspc
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0

WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1
CURRENT=$(wmctrl -d | grep '*' | cut -c1)


# Switch to desired workspace
$WM -s $WSN
$CMD &
PID=$!
echo Executed $CMD on workspace $WRKSPC,  PID=$PID
sleep 3

# Return to CURRENT workspace ?
# [ $ISRETURN ] && echo TRUE || echo FALSE
[ $ISRETURN ] && $WM -s $CURRENT
BACS
источник
Это так здорово. Работает как шарм. Большое спасибо!
Мик
0

Бета - но это работает для меня на Linux Mint.

#!/bin/sh
## Author: B.A. Computer Services www.ba-computer.com
## Purpose: Frontend to launch anything on a specific desktop/workspace.
##  lh is short for LaunchHere

USAGE="USAGE: $(basename $0) workspace(0,1,2,..) command"
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0

WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1

echo Executing $CMD on workspace $WRKSPC
$WM -s $WRKSPC
eval $CMD &
sleep 1
$WM -r :ACTIVE: -t $WRKSPC
user278634
источник
evalДолжно случиться на "$@", или команда, если ее аргумент содержит пробелы или имя файла подстановка символов, не будет работать. В общем случае этот скрипт должен заключать в кавычки расширения переменных.
Кусалананда
0

Я вдохновлен постом @ user278634 в этой теме, спасибо.

Что я модифицировал это:

  1. замените 'eval $ CMD &' на 'eval "$ CMD &"' из-за получения команды pid $ !.
  2. сохранить текущее рабочее пространство, а не переключаться на указанное; просто запустив команду в указанной рабочей области.
  3. переместить команду в указанное рабочее пространство сразу после того, как будет найден идентификатор окна, а не спать 1 сек. Это немного важно для меня, потому что я обычно открываю 8 терминалов для каждого рабочего пространства и X-геометрии при запуске desktop-login. Это займет более 8 секунд при использовании «сна 1», в то время как мой сценарий занимает всего 2,3 секунды.

Вот мой сценарий:

#!/bin/sh
# = NAME
# lh - Launch Here
#
# = SYNOPSIS
# lh <workspace> <command> [<command-args>]
#
# = DESCRIPTION
# launch command (with any command-args) on a specific desktop/workspace.
#
# Example:
#
#   lh 2 xterm -geometry 80x46+881+0
#
# = Author
# Fumisky Wells

USAGE="USAGE: $(basename $0) workspace(0,1,2,..) command"
WRKSPC=$1;[ -z "$WRKSPC" ] && echo $USAGE && exit 0
shift; CMD="$*"; [ -z "$CMD" ] && echo $USAGE && exit 0    
WM=$(which wmctrl);[ -z "$WM" ] && echo MISSING wmctrl && exit 1    
eval "$CMD &"
pid=$!    
while :; do
  wid=$($WM -l -p | grep " $pid " | awk '{print $1}')
  if [ "$wid" != "" ]; then
    $WM -i -r $wid -t $WRKSPC
    exit
  fi
  # not found yet...
  sleep 0.1
done
Фумиски Уэллс
источник
0

Установить wmctrl

sudo apt install wmctrl

И создайте скрипт (в этом примере thunderbird во втором рабочем пространстве ( -t 1)):

#!/bin/sh

 (thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Чтобы узнать имя вашего приложения на wmctrl, вы можете просмотреть его, нажав на свой терминал:

wmctrl -l

И замените его на правильное имя в сценарии.

Будьте осторожны с заглавной буквой («Thunderbird», а не «thunderbird») !!

Другой пример с firefox в рабочей области 3d ( -t 2):

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

Бонус:

Вот команда для выполнения при запуске:

sh -c "thunderbird  & sleep 5 && wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Работайте на Debain 10 с Корицей. Но должно работать для всех

pzim
источник