lrwxrwxrwx 1 root root 14 Apr 19 14:36 / etc / alternatives / x-terminal-emulator -> / usr / bin / xterm
Ausführen mit diesen 2 Aufrufen:
/usr/bin/xterm
/etc/alternatives/x-terminal-emulator
Beginnt zuerst mit schwarzem Hintergrund und andere mit Weiß. Was sind mögliche Gründe dafür, dass es sich nicht um dieselbe Konfiguration handelt? Wie kann ich es debuggen?
xterm
x-resources
alternatives
Rumca
quelle
quelle
x-terminal-emulator
mit dem Texteditor zu öffnen , um zu überprüfen, ob es sich nicht um eine ausführbare Bash-Datei oder ähnliches handelt?Antworten:
Ein X-Ressourcenname besteht aus einer Liste von Komponenten, die durch Punkte getrennt sind. Jede Komponente kann entweder ein Instanzname oder ein Klassenname sein. Instanzen identifizieren eine bestimmte Komponente (z. B. die dritte Schaltfläche in der oberen Reihe), während Klassen einen Komponententyp identifizieren (z. B. alle Schaltflächen im Hauptfenster). Konventionell beginnen Klassennamen mit einem Großbuchstaben und Instanznamen mit einem Kleinbuchstaben. Siehe Zweifel beim Erstellen einer .Xresources-Datei. oder lesen Sie die X-Dokumentation für weitere Details.
Die erste Komponente eines Ressourcennamens ist die Anwendung. Auf dieser Ebene gibt der Klassenname einen Anwendungsnamen an, der vom Autor der Anwendung ausgewählt wurde. für Xterm ist das
XTerm
( gemäß Konvention wird für Anwendungen mit dem Namen X Foo auch der zweite Buchstabe groß geschrieben). Der Instanzname ist standardmäßig der Name der ausführbaren Datei, die zum Starten der Anwendung verwendet wird. Herkömmliche X-Anwendungen unterstützen Befehlszeilenoptionen-name
und-class
das Überschreiben dieser Standardwerte.Wenn Sie Xterm über einen symbolischen Link starten, ändert sich dadurch der Name der ausführbaren Datei (es ist der Name, den Sie verwenden, oder genauer der Name, den der aufrufende Prozess in Argument 0 übergibt ). Daher ändert sich der Instanzname (der unter anderem für die Ressourcensuche verwendet wird). Wenn Sie möchten, dass Ihre Einstellungen unabhängig vom Namen angewendet werden, der zum Aufrufen von Xterm verwendet wird, definieren Sie Ihre Ressourcen (in
~/.Xresources
oder in einer beliebigen Datei, die Sie zum Einfügen ausgewählt haben) in der Klasse, zstatt durch die Instanz (
).xterm.VT100.background
quelle
Ich weiß nicht, warum es sich anders verhalten würde, aber oft sind ausführbare Dateien "überladen", um sich anders zu verhalten, wenn sie mit unterschiedlichen Namen aufgerufen werden.
Das Programm enthält normalerweise eine Struktur namens case / switch-Anweisung, die den Namen bestimmt, mit dem die ausführbare Datei aufgerufen wurde, und dann die entsprechende Funktionalität für diesen ausführbaren Namen aufruft. Dieser Name ist normalerweise das erste Argument, das das Programm erhält. Zum Beispiel
C
beim Schreiben:argv[0]
enthält den Namen der aufgerufenen ausführbaren Datei. Zumindest ist dies das Standardverhalten für alle Shells, und alle ausführbaren Dateien, die Argumente verwenden, sollten sich dessen bewusst sein.Beispiel in Perl
Hier ist ein erfundenes Beispiel, das ich in Perl zusammengestellt habe und das auch die Technik zeigt.
Hier ist das eigentliche Skript, nennen Sie es
mycmd.pl
:Hier ist das Dateisystem-Setup:
Wenn ich jetzt meine Befehle ausführe:
Wie debuggen?
Ich würde verwenden,
strace
um herauszufinden, welche Konfigurationsdateien verwendet werden, wenn die "Anwendung" mit den verschiedenen Namen aufgerufen wird.Führen Sie es dann erneut wie folgt aus:
Sie sollten sich die verschiedenen
open(...)
Zeilen in der Ausgabe ansehen, um den Fokus auf die Dateien zu beschränken, die aufgerufen werden.~ / .Xresources Datei?
Wie @chepner in den Kommentaren vorgeschlagen hat, wird das Problem möglicherweise durch eine fehlerhafte Konfigurationsdefinition in Ihrer ~ / .Xresources-Datei verursacht. In dieser Datei können Sie verschiedene Einstellungen vornehmen, z. B. die von
xterm
Sie haben wahrscheinlich eine Zeile wie diese:
Diese Regeln würden von Anwendungen übernommen, deren Name XTerm ist, aber nicht von anderen Apps wie
x-terminal-emulator
. Es ist auch durchaus möglich, dass die Regel stattdessen so aussieht:HINWEIS: Sie können das erneute Laden von Änderungen in dieser Datei wie folgt erzwingen:
Verweise
quelle
diff <(grep open xterm.log) <(grep open emulator.log)
zeigt 0 Ergebnisse. Außerdem haben beide Zeichenfolgenxterm*ReverseVideo=on
(und keine anderen ähnlichen Übereinstimmungen).xterm*ReverseVideo=on
, dies gilt nur für Programme, deren Namen mit beginnenxterm
.x-term-emulator
hatx-term
nichtxterm
als Präfix, daher wird diese Ressource nicht verwendet.