Як запустити додаток на іншому робочому просторі?


13

Мені потрібно запустити програму GUI [Lotus Symphony] на робочому просторі, відмінному від використовуваного. [напр .: на робочому столі GNOME є 4 робочі області.]

З: Як це зробити?

ps: Це потрібно, тому що перший запуск Lotus Symphony після перезавантаження дуже, дуже повільний, але після того, як він буде використаний один раз, він починається дуже швидко. Я думаю, що це сховає себе. Ось чому я хочу запускати його під час кожного завантаження на іншому робочому просторі, тому це буде швидко пізніше, якщо мені потрібно буде його використовувати.


Я думаю, може бути корисним знати, яку ОС та яку версію GNOME ви використовуєте.
enzotib

ubuntu 10.04 - gnome-desktop-data 1: 2.30.2-0ubuntu1
LanceBaynes

Відповіді:


8

Ознайомтеся з Devil's Pie (хоча я не впевнений, що він би працював з Gnome3), і ви можете знайти більше корисної інформації про stackoverflow bash .

В основному слід зробити наступне:

#!/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 це не будь-яке інше відоме ім'я програми, принаймні, не на Монетному дворі 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

Це так чудово. Працює як шарм. Дуже дякую!
Мік

0

Бета - але вона працює на монетному дворі Linux.

#!/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

Можливо, це evalповинно статися на "$@", або команда, якщо будь-який її аргумент містить пробіли або імена файлів, що поширюють символи, не працюватиме. Загалом, цей сценарій потребує цитування змінних розширень.
Kusalananda

0

Я натхненний публікацією @ user278634 в цій темі, дякую.

Що я змінив:

  1. змінити "eval $ CMD &" на "eval" $ CMD & "'через отримання командного pid $ !.
  2. зберігати поточну робочу область, а не перемикатися на вказану; просто запуск команди у вказаній робочій області.
  3. перемістіть команду у вказану робочу область відразу після того, як буде знайдено ідентифікатор вікна, а не спати 1 сек. Це трохи важливо для мене, оскільки я зазвичай відкриваю 8 терміналів для кожної робочої області та X-геометрії при запуску робочого столу-входу. Це зайняло б більше 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

І замініть його на правильну назву в сценарії.

Будьте поважні з великої літери ("Гроза", а не "гроза") !!

Інший приклад з 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 з Корицею. Але має працювати для всіх

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.