.xinitrc vs. AwesomeWM Autorun-Programme. Welcher ist besser?

990
xvlaze

Ich habe nach einer Möglichkeit gesucht, einige benutzerdefinierte Apps zu starten, wenn ich mich in LightDM bei meiner Sitzung anmelde. Bisher habe ich zwei verschiedene Wege gefunden:

1. Passen Sie .xinitrc: Zum Beispiel, wenn ich ein Terminal - Fenster hinzugefügt werden soll, wenn ich den X - Server zu starten, würde ich nur noch hinzufügen muß xterm -geometry 80x50+494+51 &vor exec awesome.

2. Fügen Sie rc.lua einige Apps hinzu: Wie hier zu sehen, würden die Anwendungen beim Start von AwesomeWM starten.

Die Methoden sind klar, aber ich habe ein Problem gefunden, bei dem ich darüber nachdachte, welche Option besser wäre.

Der erste Weg würde nur funktionieren, wenn ich explizit startxeinen TTY eingebe. Wenn Sie den X-Server ohne diesen Befehl starten (beispielsweise den Computer normal einschalten), werden die Anwendungen nicht gestartet. Wie konnte ich das verhindern?

Die Hauptfrage hier ist jedoch: Falls ich arbeiten kann .xinitrc, wäre es ein "besserer" Weg (in Bezug auf Effizienz und Sicherheit), als wenn ich meine eigene Kopie editiere rc.lua?

0

3 Antworten auf die Frage

1
Emmanuel Lepage Vallee

Update 2018:

Die Verwendung des XDG-Autostarts ist immer noch die standardkonforme Methode. Awesome v4.3 fügt jedoch die neue Funktion awful.spawn.once hinzu, mit der die Eigenschaft "Einzelinstanz" der Anwendung direkt auf dem X-Server gespeichert wird . Dies ermöglicht spawn, dass der Befehl mehrmals aufgerufen wird, während er nur einmal ausgeführt wird. Es funktioniert nach dem Neustart.

Original:

Am besten implementieren Sie das XDG-Autostart-Protokoll. In der Regel müssen Dateien hinzugefügt werden, um ~/.config/autostartdann ein Skript oder einen Dämon für das Starten der Apps zu sorgen. Dieses Skript oder Daemon wird dann entweder vom Sitzungsmanager oder von gestartet .xinitrc.

rc.luasollte nicht für Autostart verwendet werden, da es zu einem zufälligen Zeitpunkt ( mod4+ctrl+r) neu gestartet werden kann und alles erneut ausführen kann. Einige Benutzer verfügen über ausgefeilte Systeme, um zu ermitteln, ob bereits etwas gestartet wurde, aber meiner Meinung nach ist es das nicht wert.

Der zweitbeste Weg ist direkt von .xinitrc.

1
David Sorkovsky

Ich glaube, dass AwesomeWM-Autorun-Programme besser sind, wenn sie gut gemacht werden

Warum = Wenn Sie eines Ihrer automatisch auszuführenden Programme beenden und sie neu starten möchten, starten Sie (a) X neu [schließen Sie alles im Prozess ab] (b) starten Sie sie erneut von einer Shell aus [Ausgabemeldungen gehen jetzt in diese Shell], (c) Erstellen Sie einen speziellen Re-Launch-Code in rc.lua [über dem Launch-Code, den Sie in .xinitrc eingegeben haben

How = Das funktioniert gut für mich ... a) Sobald die Debug-Zeilen in rc.lua hinzugefügt werden ...

 local gears = { table = require( "gears.table" ), p_call = require( "gears.protected_call" ) }  gears.p_call( dofile, path_this .. "runonce.lua" ) 

b) Und hier ist der Teil "Wenn gut gemacht" (IMHO), der in runonce.lua ist ...

 local naughty = require( "naughty" ) local awful = { spawn = require( "awful.spawn" ) } local string = { sub = string.sub, find = string.find, format = string.format }  -- This function makes sure the application is not restarted when awesome is reloaded local function run_once( command ) local args_start = string.find( command, " " ) local pgrep_name = args_start and command:sub( 0, args_start - 1 ) or command  local command = "pgrep -u $USER -x " .. pgrep_name .. " > /dev/null || (" .. command .. ")"  awful.spawn.easy_async_with_shell( command, function( stdout, stderr, exitreason, exitcode ) if exitcode ~= 0 then naughty.notify({ preset = naughty.config.presets.critical, text = string.format( "%s\n\n%s\n%s\n%s\n%s",  command, stdout, stderr, exitreason, exitcode ) }) end end ) end  -- Start these if not already running run_once( "guake &> /dev/null" ) run_once( "remmina -i &> /dev/null" ) run_once( "skypeforlinux" ) 

Warum ich glaube, dass es gut gemacht wird ...

1) Funktioniert mit Programmen, die über Parameter verfügen [sucht nur nach dem Namen, nicht nach den Argumenten] 2) Benachrichtigung, wenn Probleme auftreten [ohne Awesome zu töten] 3) Nur den unteren Abschnitt bearbeiten

Schließlich ... mod + ctrl + r lädt fantastisch [nichts ändert sich wirklich, setzt Memmory nur zurück] und natürlich werden die Apps, die Sie immer wollen, genauso gestartet, wie sie das erste Mal waren

Beachten Sie, dass AwesomeWM git-master (v4.3) über eine genauere Version verfügt: https://awesomewm.org/apidoc/libraries/awful.spawn.html#once Emmanuel Lepage Vallee vor 5 Jahren 0
Schön zu wissen, dass eine Standardmethode kommen wird - ich werde es überprüfen, wenn ich auf die anstehende Version 4.3 aktualisiere David Sorkovsky vor 5 Jahren 0
0
Daishi

Ich habe ein sehr einfaches Skript mit dem Namen /usr/local/bin/awesome_run_once:

#!/bin/bash  pgrep $@ > /dev/null || ($@ &) 

Am Ende ~/.config/awesome/rc.luafüge ich der App, die ich ausführen möchte, einige Anrufe hinzu:

-- auto start programs awful.util.spawn("awesome_run_once wicd-client") awful.util.spawn("awesome_run_once redshift") awful.util.spawn("awesome_run_once nextcloud") 

Funktioniert gut genug.

Ich habe diese Idee von Autostart bekommen - super, aber die Seite scheint nicht mehr online zu sein ...