Bagaimana cara memulai aplikasi di ruang kerja yang berbeda?

13

Saya perlu memulai aplikasi GUI [Lotus Symphony] pada ruang kerja yang berbeda dari yang saat ini digunakan. [ex .: ada 4 ruang kerja di desktop GNOME.]

T: Bagaimana saya melakukan ini?

ps: Ini diperlukan karena start pertama Lotus Symphony setelah reboot sangat, sangat lambat, tetapi setelah digunakan sekali, itu dimulai dengan sangat cepat. Saya pikir itu cache sendiri. Itu sebabnya saya ingin memulainya di setiap boot di ruang kerja yang berbeda, jadi akan lebih cepat nanti jika saya perlu menggunakannya.

LanceBaynes
sumber
Saya kira itu bisa membantu untuk mengetahui OS apa dan versi GNOME apa yang Anda gunakan.
enzotib
ubuntu 10.04 - gnome-desktop-data 1: 2.30.2-0ubuntu1
LanceBaynes

Jawaban:

8

Lihat Devil's Pie (walaupun saya tidak yakin ini akan bekerja dengan Gnome3), dan Anda dapat menemukan informasi yang lebih berguna tentang stackoverflow bash .

Pada dasarnya Anda harus melakukan hal berikut:

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

(Saya baru saja menyalin & membuka kode di atas dari tautan StackOverFlow di atas, karena saya pikir ini cukup jelas).

MEMPERBARUI:

Lihat di sini untuk solusi yang lebih mudah di situs terbaik untuk ekstensi Gnome 3, Anda harus menginstal ekstensi Pindahkan Otomatis Windows untuk Gnome 3. Jika itu tidak bekerja untuk Anda (seperti yang Anda lihat di tautan ada beberapa distro bahwa otomasi instalasi tidak berfungsi dengan benar, dapatkan eksploitasi yang lebih rinci di sini tentang cara membuatnya bekerja.

Hanan N.
sumber
2

Posting asli tentang menggunakan skrip untuk membuat aplikasi muncul di ruang kerja tertentu, sehingga skrip lain dapat digunakan dalam skrip Start Up untuk memungkinkan pengguna untuk terus bekerja sementara aplikasi permulaan yang sangat lambat dimuat di ruang kerja lain. Script saya berfungsi sebagai front-end untuk sintaks wmctrl yang agak rumit, untuk meluncurkan aplikasi apa saja di ruang kerja apa pun, dari prompt perintah apa pun. Jadi skrip lebih lanjut yang hanya mencantumkan sesuatu seperti, lh 1 thunderbird; lh 2 firefox; lh 3 calculator...., atau apa pun, sekarang mudah. Namun ada beberapa kesulitan dengan waktu, sehingga tidur dalam skrip saya. Di bawah ini adalah versi terbaru, yang tidak akan saya pertahankan atau posting lagi. Gunakan SEBAGAIMANA ADANYA, tidak ada jaminan kecurigaan untuk penggunaan tertentu. Ubah sesuka Anda. Saya sarankan menabung sebagai /usr/local/bin/lh, hanya karenalh bukan nama program lain yang diketahui, setidaknya bukan pada Mint 18. Adapun variabel — saya mengutip variabel yang saya anggap perlu dikutip.

#!/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
sumber
Ini sangat bagus. Bekerja seperti pesona. Terima kasih banyak!
Mic
0

Beta - tetapi bekerja untuk saya di 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
pengguna278634
sumber
The evalmungkin harus terjadi pada "$@", atau perintah, jika ada argumen mengandung spasi atau nama file globbing karakter, tidak akan bekerja. Secara umum, skrip ini perlu mengutip ekspansi variabel.
Kusalananda
0

Saya terinspirasi dari posting @ user278634 di utas ini, terima kasih.

Yang saya modifikasi adalah:

  1. ubah 'eval $ CMD &' ke 'eval "$ CMD &"' karena mendapat perintah pid $ !.
  2. menjaga ruang kerja saat ini daripada beralih ke yang ditentukan; hanya meluncurkan perintah di ruang kerja yang ditentukan.
  3. pindahkan perintah ke ruang kerja yang ditentukan tepat setelah window-id ditemukan, daripada tidur 1 detik. Ini sedikit penting bagi saya karena saya biasanya membuka 8 terminal untuk setiap ruang kerja dan X-geometri pada startup desktop-login. Ini akan memakan waktu lebih dari 8 detik saat menggunakan 'sleep 1' sementara skrip saya hanya membutuhkan waktu 2,3 ​​detik.

Di sini skrip saya adalah:

#!/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
Fumisky Wells
sumber