Làm thế nào để bắt đầu một ứng dụng trên một không gian làm việc khác?


13

Tôi cần khởi động ứng dụng GUI [Bản giao hưởng Lotus] trên không gian làm việc khác với không gian làm việc hiện đang sử dụng. [ví dụ: có 4 không gian làm việc trên màn hình nền Gnome.]

Q: Làm thế nào để tôi làm điều này?

ps: Điều đó là cần thiết bởi vì sự khởi đầu đầu tiên của Lotus Symphony sau khi khởi động lại rất, rất chậm, nhưng sau khi nó được sử dụng một lần, nó bắt đầu rất nhanh. Tôi nghĩ rằng nó lưu trữ chính nó. Đó là lý do tại sao tôi muốn khởi động nó ở mỗi lần khởi động trên một không gian làm việc khác nhau, vì vậy nó sẽ nhanh hơn nếu tôi cần sử dụng nó.


Tôi cho rằng có thể hữu ích khi biết hệ điều hành nào và phiên bản Gnome nào bạn đang sử dụng.
enzotib

ubfox 10.04 - gnome-desktop-data 1: 2.30.2-0ubfox1
LanceBaynes

Câu trả lời:


8

Hãy xem Devil's Pie (mặc dù tôi không chắc nó sẽ hoạt động với Gnome3) và bạn có thể tìm thấy nhiều thông tin hữu ích hơn về bash stackoverflow .

Về cơ bản bạn nên làm như sau:

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

(tôi vừa sao chép & pase đoạn mã trên từ liên kết StackOverFlow ở trên, vì tôi nghĩ nó tự giải thích).

CẬP NHẬT:

Xem ở đây để có giải pháp dễ dàng hơn tại trang web tốt nhất cho tiện ích mở rộng Gnome 3, bạn nên cài đặt tiện ích mở rộng Auto Move Windows cho Gnome 3. Trong trường hợp nó không hoạt động cho bạn (như bạn có thể thấy trong liên kết có một số bản phát hành tự động hóa cài đặt không hoạt động đúng, hãy khai thác chi tiết hơn ở đây về cách làm cho nó hoạt động.


2

Bài đăng gốc liên quan đến việc sử dụng tập lệnh để làm cho ứng dụng xuất hiện trên một không gian làm việc cụ thể, sao cho tập lệnh khác có thể được sử dụng trong tập lệnh Start Up để cho phép người dùng tiếp tục làm việc trong khi ứng dụng bắt đầu rất chậm được tải trên không gian làm việc khác. Kịch bản của tôi hoạt động tuyệt vời như giao diện người dùng cho cú pháp wmctrl khá cồng kềnh, để khởi chạy bất kỳ một ứng dụng nào trên bất kỳ không gian làm việc cụ thể nào, từ bất kỳ dấu nhắc lệnh nào. Do đó, một kịch bản tiếp theo chỉ đơn giản là liệt kê một cái gì đó như, lh 1 thunderbird; lh 2 firefox; lh 3 calculator...., hoặc bất cứ điều gì, bây giờ dễ dàng. Tuy nhiên, có một số khó khăn với thời gian, do đó, giấc ngủ trong kịch bản của tôi. Dưới đây là phiên bản cập nhật mà tôi sẽ không duy trì hoặc đăng lại. Sử dụng AS IS, không đảm bảo sự phù hợp cho bất kỳ mục đích sử dụng cụ thể nào. Sửa đổi như bạn muốn. Tôi đề nghị tiết kiệm như /usr/local/bin/lh, đơn giản vìlh không phải là bất kỳ tên chương trình đã biết nào khác, ít nhất là không có trên Mint 18. Đối với các biến, tôi đã trích dẫn các biến tôi thấy cần thiết để được trích dẫn.

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

Cái này hay quá. Hoạt động như một lá bùa. Cảm ơn rất nhiều!
Mic

0

Beta - nhưng nó hoạt động với tôi trên 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

Điều evalcó thể xảy ra trên "$@"hoặc lệnh, nếu bất kỳ đối số nào của nó chứa khoảng trắng hoặc tên tệp ký tự toàn cầu, sẽ không hoạt động. Nói chung, kịch bản này cần trích dẫn mở rộng biến.
Kusalananda

0

Tôi lấy cảm hứng từ bài viết của @ user278634 trong chủ đề này, cảm ơn bạn.

Những gì tôi sửa đổi là:

  1. thay đổi 'eval $ CMD &' thành 'eval "$ CMD &"' vì nhận lệnh pid $!.
  2. giữ không gian làm việc hiện tại thay vì chuyển sang không gian làm việc được chỉ định; chỉ cần khởi chạy lệnh tại không gian làm việc được chỉ định.
  3. di chuyển lệnh đến không gian làm việc được chỉ định ngay sau khi tìm thấy id cửa sổ, thay vì ngủ 1 giây. Điều này hơi quan trọng đối với tôi vì tôi thường mở 8 thiết bị đầu cuối cho mỗi không gian làm việc và hình học X khi khởi động đăng nhập máy tính để bàn. Điều này sẽ mất hơn 8 giây khi sử dụng 'ngủ 1' trong khi tập lệnh của tôi chỉ mất 2..3 giây.

Kịch bản của tôi là:

#!/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.