
Ich frage mich, ob ich ein Fensterprogramm in einen bestimmten Arbeitsbereich „senden“ kann, wenn ich es über die Befehlszeile starte.
Ich möchte beispielsweise meinen Computer mit einer bestimmten Anzahl geöffneter Fensterprogramme in verschiedenen Arbeitsbereichen starten. Ist das möglich? Welche grundlegenden Konzepte stecken dahinter?
Ich verwende Unity auf Ubuntu 14.04.
Ich habe auch versucht zu starten gdevilspie
, aber es scheintvon einem Fehler betroffen.
Danke! :)
Antwort1
Verwenden Sie wmctrl
beispielsweise gedit
:
gedit & sleep 3; wmctrl -i -r `wmctrl -l -p | grep $! | awk '{ print $1 }'` -t 1
gedit &
gedit im Hintergrund ausführensleep 3
3 Sekunden schlafen, auf die Fenstererstellung warten (mein Rechner ist etwas langsam)$!
gibt die PID des vorherigen Befehls zurück (z. B.: gedit pid)wmctrl -l -p | grep PID | awk '{ print $1 }'
WID von gedit PID abrufenwmctrl -i -r WID -t 1
Fenster mit WID auf den 2. Desktop verschieben
Ein anderer Weg:
wmctrl -s 1 ; gedit & sleep 3; wmctrl -s 0;
- Wechseln Sie zum 2. Desktop, starten Sie gedit, warten Sie 3 Sekunden und wechseln Sie zurück zum 1. Desktop
Referenz:
Antwort2
Es ist im Prinzip dasselbe, was @user.dz geantwortet hat, nur parametrisiert, und anstatt 3 Sekunden zu warten, bis der Windows-Handler erstellt wird, läuft dieser hier in einer Schleife, bis er gefunden wird.
# workspace target
_WS=3
export DISPLAY=:0
gedit &
_PID="$!"
_WID=""
while [[ $_WID == "" ]]; do
_WID=$(wmctrl -l -p 2>/dev/null | grep $_PID | awk '{ print $1 }')
sleep 1
done
wmctrl -i -r $_WID -t $_WS