i3wm: Starten Sie Anwendungen auf bestimmten Arbeitsbereichen, wenn i3 gestartet wird

56

Wie kann ich Anwendungen auf bestimmten Arbeitsbereichen in i3 starten, wenn es gestartet wird?

Warum funktioniert das in meiner Konfigurationsdatei nicht? :

workspace 1; exec firefox; workspace 2; exec chromium; workspace 1
Gradient
quelle

Antworten:

61

Laut der Arch Wiki i3-Seite verwenden Sie zum automatischen Starten einer Anwendung in einem bestimmten Arbeitsbereich Folgendes i3-msg:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
jasonwryan
quelle
4
Ja, eine Linie wie exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'funktioniert. Aber ich finde es ein wenig seltsam zu verwenden , execauf i3-msgdem ein Befehl ist gemeint i3 Befehle auszuführen. Warum kann ich nicht direkt workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1in meine Konfigurationsdatei schreiben ?
Gradient
3
Dadurch wird nur alles in Arbeitsbereich 1 für mich geöffnet.
cmc
4
Funktioniert für die meisten Apps. Wird jedoch google-chrome-stableimmer im letzten Arbeitsbereich in meinem Setup geöffnet. Mit dieser Konfiguration wird Chrome beispielsweise in Arbeitsbereich 4 neben "htop" geöffnet.
Danijar
3
Beachten Sie, dass i3 jetzt Funktionen zum Speichern und Wiederherstellen von Layouts bietet, die es in den meisten Fällen unnötig machen, i3-msg aufzurufen.
Wieland
1
Das Speichern / Wiederherstellen von @Wieland-Layouts unterscheidet sich vom automatischen Start . Ersteres befasst sich nur mit dem Einrichten von Schwalbenfängern für Programmfenster, während Letzteres eine Instanz einer Anwendung auf Anforderung des OP startet.
Antony Thomas
12
# This is what I use in ie config
# custom variables for workspaces
set $ws1 "1< txt >"
set $ws2 "2> fm "
set $ws3 "3< Web >"
set $ws4 4
set $ws5 5
set $ws6 6
set $ws7 7
set $ws8 8
set $ws9 9


##==================================================##
#                         *** Workspace specific settings ***                     #
##=================================================##
# Assign Workspaces:
assign [class="Firefox"] $ws3
assign [class="Chromium"] $ws3
assign [class="Google-chrome-beta"] $ws3
assign [class="^Geany"] $ws1
Kopfschuss
quelle
Dies funktioniert für einige Anwendungen, für andere jedoch nicht. Ich vermute, es könnte mit der im classArgument verwendeten Zeichenfolge zusammenhängen . Gibt es eine Möglichkeit, genau zu wissen, welcher Klasse eine Anwendung zugeordnet ist?
Luís de Sousa
@ LuísdeSousa Sie xprop | grep CLASSim Terminal, ändert sich Ihr Mauszeiger in ein Fadenkreuz, klicken Sie auf das Programm, dessen Klasse Sie abrufen möchten, und verwenden Sie die zweite Variable, die in Ihrem Terminal angezeigt wird. Beispielergebnis für Chrome:WM_CLASS(STRING) = "google-chrome", "Google-chrome"
kittenparry
@kittenparry. Vielen Dank für den Vorschlag, aber unter Verwendung der Zeichenfolge aus dem xpropBefehl werden die Fenster nicht dem gewünschten Arbeitsbereich zugewiesen.
Luís de Sousa
1
@ LuísdeSousa manche Programme arbeiten nicht damit wie Spotify. Für sie könnten Sie etwas Ähnliches schreiben, in for_window [class="Spotify"] move to workspace $ws10dem $ws10sich Ihre Arbeitsbereichsvariable befindet.
Kätzchen parieren
10

Es ist nur ein Autostart beim Start des Arbeitsbereichs, kein Autostart beim Start von i3, aber ich dachte, es könnte nützlich sein.

Um beispielsweise meinen Webbrowser im genannten zweiten Arbeitsbereich "web" zu starten, habe ich Folgendes in meiner Konfiguration getan:

bindsym $mod+2 workspace 2:web; layout tabbed; exec [ $(ps h -C vimb | wc -l) = 0 ] && /usr/bin/vimb -s

Wenn ich Taste 2 drücke, wird mein Webbrowser gestartet, aber wenn er bereits geöffnet ist, wird er nicht neu gestartet, sondern wechselt einfach zum Webarbeitsbereich.

Hinweis: Das Layout kann manchmal ärgerlich sein, es ist keine Voraussetzung.

Weitere Details finden Sie in meinem conf

Tyjak
quelle
1
Sie können dies sehr einfach tun, indem Sie einen Arbeitsbereich zuweisen . Um zum Beispiel bei pidginjedem Start in den dritten Arbeitsbereich zu wechseln , habe ich in der Konfiguration assign [class="Pidgin"] $tag3.
Hi-Angel
Das Zuweisen zu einem Arbeitsbereich ist anders. Mit der Lösung von @ tyjak wird eine Anwendung gestartet, wenn Sie einen bestimmten Arbeitsbereich öffnen. Durch das Zuweisen einer Anwendung zu einem Arbeitsbereich wird diese Anwendung bei jedem Öffnen in einen Arbeitsbereich verschoben.
Mike
5

Ich habe es gerade am Ende meiner ~/.config/i3/configDatei zum Laufen gebracht:

for_window [class="Firefox"] move container to workspace 2
exec --no-startup-id firefox
robru
quelle
Laut Arch Linux i3 Beispiel für Firefox: Setzen Sie zuerst Ihre Variable set $ws1 "Firefox"und fügen Sie dann die folgende Zeile einfor_window [class="Firefox"] move to workspace $ws1
Markus Weber
0

Verwenden Sie einfach assign [class="<use your program name here e.g. - Firefox>"] $workspace<eg. 5>. Es funktioniert für mich.

Tanmoy Nandi
quelle