Warum wird dieser Dateiname in Nautilus abgeschnitten?

7

In Ubuntu ist normalerweise die "Erweiterung" eines Dateinamens, dh der Teil nach dem Punkt (.), Sichtbar. Warum zeigt Nautilus nicht die Erweiterung an, eclipse.desktopwenn der lsBefehl deutlich anzeigt, dass es sich um den vollständigen Dateinamen handelt?

Das ist das list view; nicht die icon view.

Bildschirmfoto

H2ONaCl
quelle
9
Einfach weil . Desktop-Dateien werden als Anwendungsverknüpfungen erkannt. Kein großes Geheimnis da. Erkunden Sie den Nautilus-Quellcode, um herauszufinden, wie genau er ausgeführt wird.
Sergiy Kolodyazhnyy
2
Aus diesem Grund smartgit.desktopist keine Anwendungsverknüpfung. Was ist smartgit.desktop?
H2ONaCl
6
Damit es auf diese Weise erkannt wird, muss es auch ausführbar sein, IIRC ..
muru
Dies scheint ungerechtfertigt. Ausführbare Bash-Skripte haben dieses Problem nicht. Eine "binäre" ausführbare Datei wie Java hat dieses Problem nicht. Zum Experimentieren habe ich Java (eine ausführbare Datei) in xx umbenannt, um zu demonstrieren, dass der Dateiname nicht abgeschnitten ist.
H2ONaCl
3
Hi @ H2ONaCl .desktop-Dateien sind spezielle Dateien, siehe meine Antwort.
Jacob Vlijm

Antworten:

18

Über .desktop-Dateien und ihre spezielle Funktion

.desktopDateien sind spezielle Dateien. Sie repräsentieren Anwendungen in der GUI, entweder auf Ihrem Desktop oder in Dash / Unity. Dazu wird ein GUI- Name der Anwendung in einer Zeile innerhalb der Datei in der Zeile festgelegt

Name=Eclipse

Sie können einfach den Namen , wie die Anwendung zeigt in Dash und Unity ändern, indem Sie diese Zeile innerhalb der sich ändernden .desktopDatei, ohne das Ändern Dateiname der .desktopDatei. In diesem Fall ist es unerheblich, ob die Datei ausführbar ist oder nicht.

Wenn sich die .desktopDatei jedoch auf Ihrem Desktop befindet und nicht ausführbar ist, funktioniert sie aus in der Antwort von acidavac erläuterten Gründen nicht als Launcher und wird unter ihrem eigenen (Datei-) Namen "angezeigt":

eclipse.desktop

Wenn es ist ausführbar und auf Ihrem Desktop, funktioniert es als Trägerrakete und so ist es eine Anwendung darstellt. Dann wird der Name der Anwendung angezeigt, wie in der Zeile festgelegtName=

Sprachspezifischer Name

Wenn die .desktopDatei die Zeile hat:

X-Ubuntu-Gettext-Domain

Die Datei zeigt sogar einen sprachspezifischen Namen an, der aus einer Sprachdatei abgerufen wurde und dann in Dash und Unity angezeigt wird.


Unter einem komplizierten Beispiel: Dateiname = inkskape.desktop, "grundlegender" Schnittstellenname = Inkskape, übersetzter Name = Inkskape Vector Graphics Editor

Geben Sie hier die Bildbeschreibung ein

Der Befehl ls

Der lsBefehl ist rein klibasiert und zeigt immer den Dateinamen an.

Jacob Vlijm
quelle
Es scheint nützlich zu sein, dass .desktop-Dateien etwas Besonderes sind, wenn sie sich auf dem ~ / Desktop befinden. Es scheint mir seltsam, dass sie etwas Besonderes sind, wenn sie sich bei ~ / .local / share / applications befinden.
H2ONaCl
@ H2ONaCl Richtig, sie müssen dort nicht ausführbar sein, auch nicht in / usr / share / applications. Die meisten sind dort nicht ausführbar und zeigen ihren eigenen Namen. Schauen Sie einfach in das Verzeichnis. Dash / Unity liest dann ihren Namen = -line.
Jacob Vlijm
Sie müssen überall im Home-Verzeichnis des Benutzers ausführbar sein. Siehe Screenshot von meinem Desktop: imgur.com/a/bTXYj Ohne festgelegte ausführbare Berechtigungen kann es nicht ausgeführt werden. Desktop ist nur ein Sonderfall eines Nautilus-Fensters, aber es gelten die gleichen Regeln
Sergiy Kolodyazhnyy
@JacobVlijm Ich habe auf H2ONaCl geantwortet, dass die Dateien etwas Besonderes sind. Ich habe kein Problem mit Ihrer Antwort
Sergiy Kolodyazhnyy
@ JacobVlijm Ich vergesse das manchmal zu tun
Sergiy Kolodyazhnyy
20

Zitat aus Ubuntus Sicherheitsrichtlinie :

Ausführungsberechtigungsbit erforderlich

  • Anwendungen, einschließlich Desktops und Shells, dürfen keinen ausführbaren Code aus Dateien ausführen, wenn beide:

    • Fehlen des ausführbaren Bits
    • befindet sich im Home-Verzeichnis oder im temporären Verzeichnis eines Benutzers.
  • Dies umfasst * .desktop-, * .jar- und * .exe-Dateien.

Was ist eine gültige .desktopDatei im Home-Verzeichnis des Benutzers?

Gemäß der Sicherheitsrichtlinie von Ubuntu ist die Ausführungsberechtigung in .desktopsDateien und Shells-Skripten ein Muss, um ausführbaren Code aus diesen Dateien auszuführen, wenn sie sich im Home-Verzeichnis eines Benutzers befinden.

Nautilus betrachtet eine .desktopDatei nicht als gültige Anwendungsverknüpfungen, es sei denn, sie verfügt über ein ausführbares Bit, wenn sie sich im Home-Verzeichnis eines Benutzers befinden.

Andererseits ist es im Quellcode von nautilus fest codiert, dass .desktopder Name einer gültigen Datei aus dem Feld Name=oder Name[$LANG]in der .desktopDatei angezeigt wird, wobei der Dateiname und die Erweiterung ignoriert werden. Dies gilt nicht für .shoder .jarDateien in Nautilus.

Beispiel: Bei einer neuen Ubuntu-Installation erhält jeder Benutzer sein Ausgangsverzeichnis examples.desktop. Der Dateiname lautet examples.desktop. Aber im Nautilus kann man es so sehen Examples. Wenn Sie in die .desktopDatei schauen, sehen Sie Folgendes (ich zeige nur einen Teil davon):

Name = Beispiele
Name [aa] = Ceelallo
..
Name [en_AU] = Beispiele
Name [en_CA] = Beispiele
Name [en_GB] = Beispiele
..

Sie können die Berechtigung (try ls -la /path/to/filename.extension) von Eclipse.desktopund überprüfen smartgit.desktop. Ersteres hat ein ausführbares Bit gesetzt, letzteres nicht.

Aus diesem Grund erkennt nautilus Eclipse.desktopals Anwendungsverknüpfungen und zeigt seine Erweiterung nicht an.

Souravc
quelle
1
Ja, genau das. Gute Arbeit für die Bereitstellung des Links. Gute Antwort
Sergiy Kolodyazhnyy
Ich habe viele ausführbare Dateien unter ~ / Documents / bashscripts, die sich "unter" dem Home-Verzeichnis befinden, und dennoch zeigt Nautilus die Dateinamenerweiterung meiner * .sh-Dateien an. Dies gilt für die Listenansicht und die Symbolansicht. Ich habe auch Java in die Datei xx kopiert. Durch das Kopieren von Java in die Datei xx bleibt die ausführbare Berechtigung der ursprünglichen Java-Datei erhalten. Nautilus zeigt den Dateinamen in der Listenansicht und in der Symbolansicht als xx an. Was Sie über ausführbare Dateien sagen, scheint in diesen Fällen nicht zuzutreffen. Im Allgemeinen scheint es falsch zu sein, zu sagen, dass das ausführbare Bit dazu führt, dass die Erweiterung von Nautilus abgeschnitten wird.
H2ONaCl
1
Das von Ihnen zitierte Zitat scheint nichts mit dem Abschneiden von Dateinamen in Nautilus zu tun zu haben. Es scheint die Notwendigkeit des Ausführungsbits zu beschreiben.
H2ONaCl
2
@ H2ONaCl hat es mit dem Abschneiden von Dateinamen zu tun. Sobald eine .desktop-Datei ausführbar ist, kann der in der Datei festgelegte Name der Anwendung festgelegt werden. Sagen Sie, Sie können haben myapp.desktopund es hat Name=Some Cool AppLinie. Wenn die Berechtigung für ausführbare Dateien festgelegt ist, kann nur dann der Dateiname als angezeigt werden Some Cool App. Natürlich muss die Datei auch das richtige Format haben und tatsächlich diese Name=Zeile haben. Übrigens, siehe die bearbeitete Antwort von souravc, sie wurde aktualisiert.
Sergiy Kolodyazhnyy
1
@ H2ONaCl siehe auch askubuntu.com/q/419610/295286 Verwandte.
Sergiy Kolodyazhnyy
6

Wenn eine .desktopDatei ausführbar ist, erkennt Nautilus sie als Desktop-Verknüpfung und zeigt nicht den Namen der Datei an, sondern die Zeichenfolge, die als Wert der Name=Eigenschaft in der Datei festgelegt wurde.

AlexP
quelle
Dies mag zutreffen, aber für mich ist es unerwartet, wenn Nautilus Dateien in ~ / .local / share / applications / anzeigt. Das Kopieren dieser Datei nach ~ / anyDirectory / führt weiterhin zu einem abgeschnittenen Dateinamen. Keiner dieser Orte ist der ~ / Desktop.
H2ONaCl
1
Muss sich nicht im Ordner ~ / Desktop befinden. Der Dateiname wird nicht abgeschnitten . Es ist nicht angezeigt überhaupt . Nautilus zeigt die in der Datei festgelegte Eigenschaft Name = an.
AlexP
Ok, es ist nicht abgeschnitten. Es sieht nur zufällig so aus und kam wirklich aus der Datei. Warum brauchen wir dieses Verhalten überhaupt, wenn die Autoren des Befehls 'ls' es nicht für angebracht hielten, dies ebenfalls zu tun?
H2ONaCl
@ H2ONaCl Warum sollte es sein? Der ursprüngliche lsBefehl wurde geschrieben, bevor GUIs überhaupt "eine Sache" waren, und es gibt keinen Grund für ein Power-User-Programm, einen Dateityp in einer Umgebung, in der die fraglichen Dateien nicht einmal verwendet werden, völlig anders zu behandeln als alle anderen .
wizzwizz4
0

Unter diesem Link schreibt der Autor "fragos":

Wenn Sie diesen Ordner in nautilus öffnen, werden die .desktop-Dateien leider mit dem in der Datei angegebenen Symbol und dem in der Datei angegebenen Dateinamen angezeigt.

Wenn er "Dateiname genannt innerhalb" sagt, bedeutet dies, dass der angezeigte Dateiname von innen übernommen wird. Ich würde sagen "Dateiname, der innerhalb gesetzt wird, wenn das ausführbare Bit gesetzt ist". Er kann recht haben, dass dies unglücklich ist. Seltsamerweise habe ich einige, bei denen das Ausführungsbit gesetzt ist, und einige, bei denen dies nicht der Fall ist. Diejenigen, bei denen das Ausführungsbit NICHT gesetzt ist, sind keine Ursache für Unglück, aber ich weiß nicht, warum ich Glück hatte. Wenn das Bit gesetzt ist, kann es vielleicht als eine Eigenart oder ein Fehler angesehen werden.

H2ONaCl
quelle
Entwickler können die .desktopausführbare Datei festlegen oder nicht. Die meisten von ihnen nicht, wie Sie in sehen können /usr/share/applications. Es gibt auch keinen Grund, sie dort ausführbar zu machen, und sie zeigen ihren Dateinamen in nautilus (nicht in Unity / Dash). Die Tatsache , dass sie können als direkten Launcher verwendet werden macht Sinn, und so , dass sie dann ihre GUI Namen zeigen, wenn ausführbar gemacht.
Jacob Vlijm
Das ist nicht nautilusspezifisch. Das alles macht völlig Sinn und ist definitiv kein Fehler. Wie bereits erwähnt, ist der GUI- Name einer .desktopDatei wie in Dash / Unity flexibel, häufig sogar sprachspezifisch. Kein Fehler, so ist es gestaltet.
Jacob Vlijm
Ich weiß nicht, warum du sagst, dass das Sinn macht. Es gibt eine Inkonsistenz. Für einige Dateien ist das Ausführungsbit nicht gesetzt. Welchen Zweck erfüllen sie, wenn das Bit nicht gesetzt ist? Wenn die Dateien, für die das Bit NICHT gesetzt ist, noch funktionsfähig sind (und den vollständigen Namen anzeigen), was ist dann die Rechtfertigung für die Anzeige der Zeichenfolge aus der Datei? Es geht darum, Verzeichnisse von Dateien genau wie den Befehl 'ls' zu untersuchen. Die Verwendung der Zeichenfolge aus der Datei heraus weicht vom Verhalten des Befehls 'ls' ab. Wie kann diese Abweichung gerechtfertigt werden?
H2ONaCl
Die darin enthaltenen Dateien /usr/share/applicationssind nicht als (direkte) Starter von der GUI gedacht, sondern dienen nur der (GUI-) Schnittstelle des Betriebssystems, wie in diesem Fall Unity und Dash. Es gibt keinen Grund für einen Entwickler, die Datei ausführbar zu machen, wenn sie dort oder in gespeichert ist ~.local/share/applications. Sie können es als Fehler bezeichnen, wenn Sie möchten, aber völlig harmlos, da es nicht direkt verwendet werden soll, es sei denn, es befindet sich z. B. auf Ihrem Desktop. Wenn eine .desktop-Datei als Vertreter Ihrer Anwendung verwendet wird, soll sie sich abhängig von Ihrer Sprache usw. wie ein Chamäleon verhalten.
Jacob Vlijm
@ Jacob Vlijm, danke, dass du mir vorgeschlagen hast, es als Fehler zu bezeichnen, wenn ich will. Ich werde mich damit zufrieden geben, dass Nautilus ein Verhalten angenommen hat, das für Unity on the Desktop oder Dash bestimmt ist.
H2ONaCl