Wie wählt Linux die Anwendung aus, mit der eine Datei geöffnet werden soll?

38

Wenn eine Datei dem Betriebssystem das Dateiformat mitteilt, wie wählt das Betriebssystem die Anwendung aus, mit der es standardmäßig geöffnet werden soll?

Wird die Zuordnung unter Windows in der Registrierungstabelle gespeichert?

Wie wählt Linux die Anwendung aus, mit der eine Datei geöffnet werden soll?

Ich habe Nautilus oft benutzt, aber jetzt wechsle ich zum Terminal. Stimmt es, dass wir im Terminal immer explizit angeben müssen, mit welcher Anwendung eine Datei geöffnet werden soll? Gehört die Einstellung, mit welcher Anwendung eine Datei eines bestimmten Formats standardmäßig geöffnet werden soll, zum Dateimanager (z. B. Nautilus), und ist dies kein Problem, wenn wir in Terminals leben?

Tim
quelle
24
Linux ist nur der Betriebssystemkern. Ich nehme an, Sie meinen hier Ihre Desktop-Umgebung oder Ihren Dateimanager . Das wird wahrscheinlich auf Android-, ChromeOS-, Linux- (oder Nicht-Linux-) Betriebssystemen anders sein, auf denen KDE, Gnome, XFCE usw. ausgeführt wird
Stéphane Chazelas
wahrscheinlich. Ich weiß nicht, was der Job macht. Ich benutze Gnome, würde aber auch gerne etwas über Allgemeines wissen.
Tim
Klären Sie dann das Betriebssystem und die Desktop-Umgebung und -Anwendung. Wie Nautilus in Ubuntu 12.04 mit "Unity" -Desktop.
Stéphane Chazelas
(1) Ich bin unter Ubuntu 12.04. Ist mein Desktop Gnome oder "Unity"? (2) Ich habe Nautilus oft benutzt, aber jetzt wechsle ich zum Terminal. Stimmt es, dass wir im Terminal immer explizit angeben müssen, mit welcher Anwendung eine Datei geöffnet werden soll? Gehört die Einstellung, mit welcher Anwendung eine Datei eines bestimmten Formats standardmäßig geöffnet werden soll, zum Dateimanager (z. B. Nautilus), und ist dies kein Problem, wenn wir in Terminals leben?
Tim

Antworten:

35

Es kann verschiedene Mechanismen geben, um diese Standardeinstellungen zu handhaben. Andere Antworten konzentrieren sich jedoch in der Regel auf vollständige Desktopumgebungen, von denen jede über einen eigenen Mechanismus verfügt. Diese sind jedoch nicht immer auf einem System installiert (ich verwende häufig OpenBox), und in diesem Fall können Tools wie xdg-opendiese verwendet werden.

Zitieren des Arch- Wikis :

xdg-open ist ein desktopunabhängiges Tool zum Konfigurieren der Standardanwendungen eines Benutzers. Viele Anwendungen rufen den Befehl xdg-open intern auf.

In diesem Moment benutze ich Ubuntu (12.04) und xdg-openist verfügbar. Wenn Sie jedoch eine vollständige Desktop-Umgebung wie GNOME verwenden, xdg-openfungiert diese als einfache Weiterleitung und leitet die Dateianforderungen an Ihr DE weiter, das diese dann nach Belieben bearbeiten kann (siehe andere Antworten für GNOME und Nautilus, zum Beispiel). .

In einer Desktop-Umgebung (z. B. GNOME, KDE oder Xfce) übergibt xdg-open die Argumente einfach an die Dateiöffner-Anwendung dieser Desktop-Umgebung (gvfs-open, kde-open bzw. exo-open) Assoziationen bleiben der Desktop-Umgebung überlassen.

... was Sie zu den anderen Antworten in diesem Fall zurückbringt. Trotzdem, da dies Unix & Linux ist und nicht Ask Ubuntu:

Wenn keine Desktop-Umgebung erkannt wird (z. B. wenn ein eigenständiger Fenstermanager ausgeführt wird, z. B. Openbox), verwendet xdg-open seine eigenen Konfigurationsdateien.

Alles in allem:

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

Im ersten Fall müssen Sie die Konfiguration xdg-opendirekt mit dem xdg-mimeBefehl vornehmen (mit dem Sie auch sehen können, welche Anwendung mit welcher Datei umgehen soll). Im zweiten Fall ...

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

... müssen Sie den Dateiöffner konfigurieren, der Ihrer Desktop-Umgebung zugeordnet ist. In einigen Fällen wird die durchgeführte Konfiguration xdg-mimemöglicherweise an das richtige Konfigurationstool in Ihrer Umgebung weitergeleitet.

John WH Smith
quelle
11
In einer idealen Welt würden Gnome und KDE mithilfe der xdg-Einstellungen auswählen, welche App eine Datei öffnen soll, und Benutzeroberflächen zum Ändern der xdg-Optionen bereitstellen. Dann könnten wir nur eine Einstellungsdatenbank anstelle einer für jedes DE haben. Leider erschien xdg zu spät.
Joeytwiddle
2
In einer idealen Welt hätten Sie keine drei DEs.
Russell Borogove
1
@RussellBorogove - dann sollten wir alle auf Windows umsteigen. Es ist eine ideale Welt.
don_crissti
@don_crissti Ich denke, dies war eher als "ideal für Entwickler oder Administratoren" gedacht. Während es eine großartige Sache ist, einem Endbenutzer Abwechslung zu bieten, wäre es für Designer in der Tat viel einfacher (aber nicht unbedingt "besser"), sich auf ein einziges System zu konzentrieren. xdg-openist nur eine dieser Komponenten, die versuchen, beide Enden zusammenzubringen.
John WH Smith
1
@John - über Admins & verschiedene Apps Entwickler / Designer: Einverstanden ... aber vorgelagerte Entwickler können nur so viel. In einer idealen Welt würden wir, anstatt uns über dieses oder jenes zu beschweren, alle zu vorgelagerten Projekten wie KDE, Gnome usw. beitragen , um die Benutzerfreundlichkeit und die Iteroperabilität zwischen DEs zu verbessern. Wenn wir alle (Millionen) nur eine kleine Anstrengung unternehmen würden, wären alle diese Probleme in wenigen Tagen gelöst.
don_crissti
11

Aus dem Wiki- Eintrag,

Linux-basierte GUIs wie KDE und GNOME unterstützen MIME-basierte Zuordnungen. Beispielsweise würde der MIME-Typ text / plain einem Texteditor zugeordnet.

Auch diese Antwort hat weitere Details.

Der Dateimanager verwendet häufig eine Kombination aus Option a und b (z. B. zuerst die Dateierweiterung überprüfen, wenn diese nicht bekannt ist (oder wenn die Datei keine Erweiterung hat), dann den Inhalt überprüfen).

Der Dateityp wird auf gängigen Linux-Dateisystemen nicht als Metadaten gespeichert.

Aus dieser Antwort sehe ich die folgenden Informationen.

Der Dateimanager (standardmäßig Nautilus) verwendet den MIME-Typ einer Datei, um zu bestimmen, mit welchem ​​Programm er geöffnet werden soll. Wenn eine Anwendung installiert ist, kann sie angeben, welche MIME-Typen sie öffnen kann, und den Befehl zum Öffnen der Dateien in der .desktop-Datei, die sich in / usr / share / applications befindet. Dies ist die Datei, die für Menüs, Desktop-Verknüpfungen usw. verwendet wird.

Ramesh
quelle
1
Meine Frage lautet "Den Formattyp einer Datei angeben", bestimmt welche Anwendung die Datei öffnen soll.
Tim
11

Eine Datei teilt dem Betriebssystem nicht das Dateiformat mit, mit einer Ausnahme:

Beginnt eine ausführbare Datei mit einer sogenannten Shebang-Zeile, wie z

#! /usr/bin/perl

Dann teilt diese Zeile dem Linux-Kernel mit, mit welchem ​​Programm er gestartet werden soll /usr/bin/perl(das heißt, anstatt diese Datei auszuführen, sollte er diese Datei ausführen usr/bin/perlund als Argument angeben). Dies funktioniert natürlich nur mit Dateiformaten, die eine solche Shebang-Zeile ignorieren (oder verstehen).

Ansonsten kennt das Betriebssystem als solches die Dateitypen nicht. Viele Programme, die das Öffnen anderer Dateien ermöglichen, haben jedoch einen eigenen Mechanismus, mit dem sie entscheiden können, welches Programm zum Öffnen welcher Datei verwendet werden soll. Dies kann eine Liste im Programm selbst sein (Firefox verwaltet beispielsweise eine solche Liste), oder das Programm kann sie an die Desktop-Umgebung delegieren (von denen es mehrere für Linux gibt).

Normalerweise berücksichtigen diese Mechanismen nur den Dateinamen, um den Dateityp zu bestimmen. Eine Ausnahme bilden E-Mail-Clients und Webbrowser, bei denen der Dateityp in der Regel explizit vom Server angegeben wird.

Der Mechanismus ist normalerweise zweistufig:

  • Ermitteln Sie zunächst anhand des Dateinamens oder der angegebenen Informationen den MIME-Typ der Datei (der MIME-Typ ist eine standardisierte, aber erweiterbare Liste von Dateitypen).
  • Zweitens bestimmen Sie anhand des MIME-Typs, welches Programm ausgeführt werden soll, normalerweise über eine Art Registrierung, die entweder vom Programm selbst oder von der Desktop-Umgebung, für die das Programm geschrieben wurde, verwaltet wird.
Celtschk
quelle
Vielen Dank. Stimmt es, dass wir im Terminal immer explizit angeben müssen, welche Anwendung eine Datei öffnen soll (außer Skript mit shebang)? Gehört die Einstellung, mit welcher Anwendung eine Datei eines bestimmten Formats standardmäßig geöffnet werden soll, zum Dateimanager (z. B. Nautilus), während dies kein Problem ist, wenn wir in Terminals leben?
Tim
Wenn Sie die Gnome-Zuordnungen über die Befehlszeile verwenden möchten, können Sie den Befehl verwenden gnome-open. Ich bin sicher, dass es ähnliche Befehlszeilentools für die anderen Desktopumgebungen gibt. Bearbeiten: Ich stelle nur fest, dass John WH Smith einen Befehl gibt, der von Ihrer Desktop-Umgebung unabhängig ist.
Celtschk
6
Korrektur : Die Shebang-Zeile ist keine Nachricht an den Kernel. Es ist eine Nachricht an die Shell .
Kazark
1
@ Kazark: coderwall.com/p/pdg77q
celtschk
2
Da der Link zum eigentlichen Code auf dieser verlinkten Seite momentan nicht zu funktionieren scheint, finden Sie hier einen weiteren Link zum Kernel-Code, der sich mit Shebang-Zeilen befasst: lxr.free-electrons.com/source/fs/binfmt_script.c - natürlich könnten Sie das auch Installieren Sie einfach die Kernel-Quellen selbst und schauen Sie in die Datei.
Celtschk
4

Es ist ähnlich wie bei MS-Windows gemacht.

Es wird nicht vom Betriebssystem ausgeführt. Dies geschieht über den Dateimanager, der Teil des Fenstersystems ist. Normalerweise wird der Teil des Dateinamens nach dem letzten Punkt .verwendet, um die Entscheidung zu treffen. Es gibt eine Möglichkeit, sie in den Einstellungen festzulegen oder wenn Sie mit der rechten Maustaste auf eine Datei klicken.

Die Datei teilt dem Betriebssystem also nicht mit, die Datei ist nicht aktiv, kann also nichts für sich tun, aber der Dateimanager prüft den Dateinamen, der Dateimanager könnte ebenso wie das fileDienstprogramm in die Datei schauen .

Strg-Alt-Delor
quelle
In Windows wird dies wahrscheinlich nicht per se vom Dateimanager ausgeführt. Es kann von jeder Anwendung aufgerufen werden shell32!ShellExecute(), und obwohl shell32 Teil von Windows Shell ist, ist es nicht Teil von Windows Explorer, dem Standarddateimanager.
Ruslan
3

Wie @richard sagt, ähnelt es Windows. Ein generischer Dateimanager kann zuerst nach dem Namen einer Datei suchen und versuchen, eine Dateierweiterung zu erkennen, die einem Programm zugeordnet ist. Wenn dies fehlschlägt, wird möglicherweise versucht, die Datei zu öffnen und nach einem Header zu suchen. Wenn Sie versuchen, eine Nicht-Textdatei (z. B. eine JPEG-Datei) zu lesen, wird eine Datenfolge angezeigt, die die Datei beschreibt. Dies ist zum Beispiel die erste Zeile eines .jpeg, die ich herumliegen hatte:

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'

KidElephant
quelle
2
Einige Dateimanager analysieren den Dateiinhalt vor der Dateinamenerweiterung (möglicherweise ignorieren sie die Erweiterung sogar immer, nicht sicher). Wenn Sie beispielsweise in KDE's Dolphin GIF-Bilder mit einem Browser und PNG mit Bildbetrachter verknüpft haben file.png, file.gifwird der Bildbetrachter weiterhin durch Umbenennen der PNG-Datei in geöffnet. Und wenn Sie die Datei leeren, wird sie im Texteditor geöffnet.
Ruslan
3

Ich werde versuchen, eine grundlegende Antwort darauf zu geben, wie Unix-Systeme mit Dateien umgehen. Wie andere bereits betont haben, ist Ihre Formulierung der Frage irreführend, da die Dateien selbst nicht angeben, um welchen Typ es sich handelt, und der Kernel selbst nicht entscheidet, welche Anwendungen verwendet werden sollen.

In Unix- und Windows-Betriebssystemen werden Dateien einfach als Folge von Bytes strukturiert. Aus Tanenbaums Betriebssystemen , dritte Ausgabe:

Tatsächlich weiß oder kümmert es das Betriebssystem nicht, was in der Datei enthalten ist. Alles, was es sieht, sind Bytes. Jede Bedeutung muss von Programmen auf Benutzerebene auferlegt werden.

Aus diesem Grund werden in einer Desktop-Umgebung xdg-openStandardanwendungen zum Öffnen bestimmter Dateitypen festgelegt.

Auf einem Unix-System werden Dateien zwischen regulären Dateien und speziellen Dateien unterschieden . Eine reguläre Datei besteht lediglich aus Benutzerdaten, die entweder eine Textdatei (ASCII- oder Unicode-Codierung) oder eine Binärdatei (ausführbarer Code) sein können. Spezielle Dateien sind Dateien, die zum Ausführen des Betriebssystems erforderlich sind. Dazu gehören Verzeichnisse, Links, Pipes, Sockets und Gerätedateien. ¹

Es ist üblich, dass Dateinamen Erweiterungen enthalten, die angeben, um welchen Dateityp es sich handelt , z. B. * .c für C-Quellcode, * .html für Webseiten usw. Von Tanenbaum:

In einigen Systemen (z. B. UNIX) sind Dateierweiterungen nur Konventionen und werden vom Betriebssystem nicht erzwungen. Eine Datei mit dem Namen file.txt kann eine Art Textdatei sein. Dieser Name soll den Besitzer jedoch eher daran erinnern, als dem Computer tatsächliche Informationen zu übermitteln. Andererseits kann ein C-Compiler tatsächlich darauf bestehen, dass die zu kompilierenden Dateien in .c enden, und es kann ablehnen, sie zu kompilieren, wenn dies nicht der Fall ist.

Wenn eine Datei ohne die richtige Erweiterung gespeichert oder umbenannt wird, behält sie weiterhin das gleiche Format für diesen Dateityp bei. Auf diese Weise entscheiden die meisten Dateimanager, mit welchen Anwendungen Dateien geöffnet werden sollen, und warum der Benutzer ohne die Erweiterung most die Meldung "Wählen Sie das Programm aus, mit dem Sie diese Datei öffnen möchten:" erhält.

Zuletzt werden Umgebungsvariablen verwendet, um systemweite Einstellungen und Einstellungen auf Benutzerebene zu definieren. Zum Beispiel wird die Variable EDITORwird verwendet , um festzulegen , welche Texteditor zu öffnen , wenn Text zB Handhabung vim, nanoetc. Dies ist , wie Prozesse wissen , welchen Editor zu öffnen, wie bei der Bearbeitung einer gitNachricht zu begehen. Andernfalls ist es richtig, dass Sie angeben müssen, welche Anwendung verwendet werden soll. Beachten Sie, dass vimDateitypen durch Überprüfen der Erweiterungen und Überprüfen des Dateiinhalts erkannt werden, wenn die Einstellung festgelegt filetype onist, wodurch die korrekte Syntaxhervorhebung, Einrückung usw. angewendet wird

TL; DR

Zusammenfassend gesagt bestimmen die Anwendungen auf Benutzerebene, mit welchen Programmen ein bestimmter Dateityp geöffnet werden soll, und nicht das Betriebssystem.

Roberto Gomez
quelle