다른 작업 공간에서 응용 프로그램을 시작하는 방법은 무엇입니까?


13

현재 사용중인 작업 공간과 다른 작업 공간에서 GUI 응용 프로그램 [Lotus Symphony]을 시작해야합니다. [예 : 그놈 데스크탑에는 4 개의 작업 공간이 있습니다.]

Q : 어떻게해야합니까?

추신 : 재부팅 후 Lotus Symphony의 첫 시작이 매우 느리기 때문에 필요하지만 한 번 사용한 후에는 매우 빨리 시작됩니다. 나는 그것이 캐시 자체를 생각합니다. 그렇기 때문에 부팅 할 때마다 다른 작업 공간에서 시작해야하므로 나중에 사용해야 할 경우 더 빠릅니다.


어떤 OS와 어떤 버전의 그놈을 사용하고 있는지 아는 것이 도움이 될 것입니다.
enzotib

우분투 10.04-gnome-desktop-data 1 : 2.30.2-0ubuntu1
LanceBaynes

답변:


8

Devil 's Pie를 확인하십시오 (Gnome3에서 작동하는지 확실하지는 않지만). 스택 오버 플로우 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 확장을위한 최상의 사이트에서 더 쉬운 솔루션을 보려면 여기 를 참조 하십시오. Gnome 3 용 Auto Move Windows 확장을 설치해야 합니다. 링크가 보이지 않을 경우 설치 자동화 잘 작동하지 않는, 더 자세한 착취를 얻을 여기 그것이 작동하는 방법에.


2

원래 게시물은 스크립트를 사용하여 특정 작업 영역에 응용 프로그램을 표시하는 것과 관련이있었습니다. 따라서 시작 스크립트에서 다른 스크립트를 사용하여 다른 작업 영역에 응용 프로그램을 매우 느리게 시작하면서 작업을 계속할 수 있습니다. 내 스크립트는 명령 프롬프트에서 주어진 작업 공간에서 하나의 응용 프로그램을 시작하기 위해 다소 번거로운 wmctrl 구문의 프론트 엔드로 훌륭하게 작동합니다. 따라서 lh 1 thunderbird; lh 2 firefox; lh 3 calculator..... 등 을 단순히 나열하는 추가 스크립트 가 이제는 쉬워졌습니다. 그러나 타이밍에 약간의 어려움이 있으므로 스크립트에서 잠을 자지 않습니다. 아래는 업데이트 된 버전으로 유지 관리하거나 다시 게시하지 않습니다. 특정 용도에 적합하다는 보장은 없습니다. 원하는대로 수정하십시오. 나는로 저장하는 것이 좋습니다 /usr/local/bin/lh간단하기 때문에,lh 변수에 관해서는-인용 할 필요가 있다고 생각되는 변수를 인용했습니다.

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

베타-하지만 리눅스 민트에서 작동합니다.

#!/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. pid $! 명령을 받기 때문에 'eval $ CMD &'를 'eval "$ CMD &"'로 변경하십시오.
  2. 지정된 작업 공간으로 전환하지 말고 현재 작업 공간을 유지하십시오. 지정된 작업 공간에서 명령을 실행하기 만하면됩니다.
  3. sleep 1 초가 아니라 window-id를 찾은 직후 지정된 작업 공간으로 명령을 이동하십시오. 데스크탑 로그인을 시작할 때 각 작업 공간과 X- 형상마다 8 개의 터미널을 열기 때문에 이것은 나에게 조금 중요합니다. 내 스크립트가 2..3 초 밖에 걸리지 않는 동안 'sleep 1'을 사용하면 8 초 이상 걸립니다.

여기 내 스크립트는 다음과 같습니다

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

3d 작업 공간 ( -t 2) 에 firefox가있는 다른 예 :

#!/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 작업. 그러나 모두를 위해 작동해야합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.