Farklı bir çalışma alanında uygulama nasıl başlatılır?


13

Şu anda kullanılan olandan farklı bir çalışma alanında bir GUI uygulaması [Lotus Symphony] başlatmanız gerekiyor. [ör .: GNOME masaüstünde 4 çalışma alanı var.]

S: Bunu nasıl yaparım?

ps: Lotus Symphony'nin yeniden başlatmadan sonraki ilk başlangıcı çok, çok yavaş olduğu için bir kez kullanıldıktan sonra çok hızlı bir şekilde başlıyor. Bence kendini önbelleğe alıyor. Bu yüzden farklı bir çalışma alanındaki her önyüklemede başlatmak istiyorum, bu yüzden kullanmam gerekirse daha sonra hızlı olacak.


Sanırım hangi işletim sistemini ve hangi GNOME sürümünü kullandığınızı bilmek faydalı olabilir.
enzotib

Ubuntu 10.04 - gnome-masaüstü-veri 1: 2.30.2-0ubuntu1
LanceBaynes

Yanıtlar:


8

(Gnome3 ile çalışacağından emin olmasam da) Devil's Pie'a göz atın ve stackoverflow bash hakkında daha yararlı bilgiler bulabilirsiniz .

Temel olarak aşağıdakileri yapmalısınız:

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

(Ben sadece kopya & kendi açıklayıcı olduğunu düşünüyorum çünkü yukarıdaki StackOverFlow bağlantıdan yukarıdaki kodu pase var).

GÜNCELLEME:

Gnome 3 uzantıları için en iyi sitede daha kolay bir çözüm için buraya bakın , Gnome 3 için Otomatik Taşı Windows uzantısını yüklemelisiniz. Sizin için çalışmıyorsa (bağlantıda görebileceğiniz gibi bazı dağıtımlar tesisatın otomasyon doğru çalışmıyorsa, bir daha ayrıntılı sömürüyü olsun burada işe almak için nasıl.


2

Orijinal gönderi, bir uygulamanın belirli bir çalışma alanında görünmesini sağlamak için bir komut dosyası kullanmakla ilgiliydi, böylece bir kullanıcının başka bir çalışma alanına yüklendiğinde çok yavaş bir başlangıç ​​uygulaması yüklenirken çalışmaya devam etmesini sağlamak için Başlangıç ​​komut dosyasında başka bir komut dosyası kullanılabilir. Komut dosyam, herhangi bir komut isteminden herhangi bir çalışma alanında herhangi bir uygulamayı başlatmak için oldukça hantal wmctrl sözdiziminin ön ucu olarak harika çalışıyor. Böylece, lh 1 thunderbird; lh 2 firefox; lh 3 calculator.... ya da her neyse, bir şeyi listeleyen başka bir script artık çok kolay. Ancak zamanlama ile ilgili bazı zorluklar vardır, bu yüzden senaryomdaki uyku. Aşağıda, bakım yapmayacağım veya tekrar yayınlamayacağım güncellenmiş sürüm. OLDUĞU GİBİ kullanın, belirli bir kullanım için uygunluk garantisi yoktur. İstediğiniz gibi değiştirin. Tasarruf etmeyi öneririm /usr/local/bin/lh, çünkülh Bilinen başka bir program adı değil, en azından Mint 18'de değil. Değişkenler için — alıntı yapmayı gerekli bulduğum değişkenleri alıntıladım.

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

Bu harika. Tıkır tıkır çalışıyor. Çok teşekkürler!
Mic

0

Beta - ama benim için linux nane üzerinde çalışıyor.

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

evalMuhtemelen üzerinde gerçekleşmesi gerektiğini "$@"veya komut Terimin herhangi bir boşluk veya dosya adı globbing karakterleri, olmaz çalışmalarını içeriyor, eğer. Genel olarak, bu komut dosyasının değişken genişletmeler vermesi gerekir.
Kusalananda

0

Bu konudaki @ user278634 adlı kullanıcının gönderisinden ilham aldım , teşekkür ederim.

Ne değiştirdim:

  1. $ pD $ komutunu alması nedeniyle 'eval $ CMD &' kelimesini 'eval "$ CMD &"' olarak değiştirin.
  2. belirtilen çalışma alanına geçmek yerine geçerli çalışma alanını koru; sadece belirtilen çalışma alanında komutun başlatılması.
  3. uyku 1 saniye yerine window-id bulunduktan hemen sonra komutu belirtilen çalışma alanına taşıyın. Bu benim için biraz önemli çünkü masaüstü girişinin başlangıcında genellikle her çalışma alanı için 8 terminal ve X-geometrisi açıyorum. Komut dosyam sadece 2..3 saniye sürerken 'uyku 1' kullanılırken bu işlem 8 saniyeden uzun sürecektir.

İşte benim senaryom:

#!/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 yükle

sudo apt install wmctrl

Ve bir komut dosyası oluşturun (bu örnekte ikinci çalışma alanındaki yıldırım ( -t 1)):

#!/bin/sh

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

Wmctrl'de uygulama adınızı bilmek için terminalinize dokunarak görebilirsiniz:

wmctrl -l

Ve bunu koddaki doğru adla değiştirin.

Büyük harf ("thunderbird" değil "thunderbird") ile dikkatli olun!

3B çalışma alanındaki firefox ile diğer örnek ( -t 2):

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

Bonus:

Başlangıçta yürütme komutu şöyledir:

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

Tarçın ile Debain 10 üzerinde çalışın. Ama herkes için çalışmalı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.