別のワークスペースでアプリケーションを起動する方法は?


13

現在使用しているワークスペースとは異なるワークスペースでGUIアプリケーション[Lotus Symphony]を起動する必要があります。[例:GNOMEデスクトップには4つのワークスペースがあります。]

Q:これを行うにはどうすればよいですか?

ps:再起動後のLotus Symphonyの最初の起動は非常に遅くなりますが、一度使用するとすぐに起動するため必要です。それはそれ自体をキャッシュすると思います。そのため、別のワークスペースで起動するたびに起動したいので、後で使用する必要がある場合は高速になります。


使用しているGNOMEのOSとバージョンを知ることが役立つと思います。
enzotib

ubuntu 10.04-gnome-desktop-data 1:2.30.2-0ubuntu1
ランスベインズ

回答:


8

チェックアウト悪魔のパイを(私はないですが、必ずそれが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拡張機能の最適なサイトで簡単なソリューションを参照するには、Gnome 3のAuto Move Windows拡張機能をインストールする必要があります(リンクで確認できるように、インストールの自動化が正しく機能しない場合は、ここでそれを機能させる方法に関するより詳細な活用方法を入手してください。


2

元の投稿は、スクリプトを使用して特定のワークスペースにアプリケーションを表示することに関するものでした。そのため、スタートアップスクリプトで別のスクリプトを使用して、非常に遅い起動アプリケーションを別のワークスペースにロードしながら作業を続行できます。私のスクリプトは、コマンドプロンプトから、特定のワークスペースで任意の1つのアプリケーションを起動するための、かなり面倒な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

これはすごい。魅力のように機能します。どうもありがとう!
マイク

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

eval発生する可能性"$@"があります。または、引数にスペースまたはファイル名のグロビング文字が含まれている場合、コマンドは機能しません。一般に、このスクリプトは変数展開を引用する必要があります。
クサラナナンダ

0

このスレッドの@ user278634の投稿からインスピレーションを得ています、ありがとう。

変更したのは:

  1. コマンドpid $!を取得するため、「eval $ CMD&」を「eval "$ CMD&"」に変更します。
  2. 指定されたワークスペースに切り替えるのではなく、現在のワークスペースを保持します。指定されたワークスペースでコマンドを起動するだけです。
  3. window-idが見つかった直後に、1秒スリープするのではなく、指定したワークスペースにコマンドを移動します。私は通常、デスクトップログインの起動時に各ワークスペースとXジオメトリに対して8つのターミナルを開くため、これは私にとって少し重要です。「sleep 1」を使用する場合、これには8秒以上かかりますが、スクリプトにはわずか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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.