web-dev-qa-db-ja.com

Ubuntu 18.04の実行可能アイコンがありません

最近、Ubuntuを16.04から18.04に更新しましたが、実行可能ファイルのアイコンがテキストファイルのアイコンと同じであるという問題があります。 (ArucoDetectは実行可能ファイルで、その他は通常のテキストファイルです)

ArucoDetect is an executable

Ubuntu 16.04では、実行可能ファイルには次のような独自のアイコンがあります。

executable

Ubuntu 18.04を構成して、実行可能ファイルに独自の特別なアイコンを持たせるにはどうすればよいですか?

3
user3667089

あなたがgccを見つけて行-no-pieを追加するよりも問題がある場合、Ubuntu 18.04はウェイランドに問題があるため、これはデフォルトの実行可能ファイルです。パイなし!それは私にとってはうまくいきます。

2
Jens Eckervogt

これはMIMEタイプに関係し、ファイルが実行可能かどうかには関係ありません。もちろん、使用するすべてのスクリプトは実行可能ですが、MIMEタイプが異なるという事実は変わりません。

例:Busyboxにはアイコン executable icon 質問に表示されます。

$ file /bin/busybox

/ bin/busybox:ELF 64ビットLSB実行可能ファイル、x86-64、バージョン1(GNU/Linux)、静的にリンク、GNU/Linux 2.6.32用、BuildID [sha1] = 86b86ebdeb1e423dc1672c2a7408fb83ee70eeb1、stripped

一方、私のスクリプトには次のようなアイコンがあります text style icons

file ~/bin/vdprocessx265.sh

/home/me/bin/vdprocessx265.sh:Bourne-Again Shellスクリプト、ASCIIテキスト実行可能ファイル、非常に長い行

ご覧のとおり、実行可能ファイル中のbashスクリプトは、busyboxがELF実行可能ファイル中のASCIIテキスト内のシェルスクリプトです。

/etc/mime.typesでgrepを使用すると、さらに明確になります。

grep "exe" /etc/mime.types

application/x-executable

application/x-msdos-program com exe bat dll

grep "sh" /etc/mime.types

ユーザーは、「。mime.types」を作成して、必要に応じて独自のタイプを追加できます

<---切り取り->

text/x-csh csh

テキスト/ x-sh sh

いくつかの良い答えがあります 特定のファイルタイプのアイコンを変更するにはどうすればよいですか これは、必要な結果を得るのに役立ちます。

この質問には、さらに詳細な回答があります: ファイルの関連付けはどこに保存されますか?

@dim -no-pieスイッチを使用してコンパイルすると、異なる header が発生することがわかります。

mimetypeは、ファイルの内容に基づいて適切なMIMEタイプを推測します。 ELFファイル(ほとんどのコンパイル済みバイナリと共有ライブラリ)の場合、ヘッダーには、そのタイプを識別するフィールドe_typeが含まれています。 ET_DYNの場合、mimetypeはそれを共有ライブラリとして扱います。

デフォルトでは、gcc/ldはe_typeをET_EXECに設定するバイナリを生成し、application/x-executableとして検出されます。

このStackOverflowの回答 で説明されているように、MIMEタイプが異なる方法で推測されるため、アイコンが異なります。

出典:

ファイルの関連付けはどこに保存されますか?

特定のファイルタイプのアイコンを変更するにはどうすればよいですか?

https://access.redhat.com/blogs/766093/posts/197579

https://stackoverflow.com/questions/41398444/gcc-creates-mime-type-application-x-sharedlib-instead-of-application-x-applicati

1
Elder Geek

この回答は、GCCビルドの一部として-no-pieを使用したPiggybacking off Jensの回答の の継続にのみ存在します...

これはバグですPosition Independent Executables(PIE)によって引き起こされます。 PIEは、最新バージョンのLinuxのセキュリティ機能であり、メモリアドレスをランダム化し、ファイル構造をわずかに変更します。 PIEバイナリは異なるtypeを持っているため、PIEバイナリは「標準」のLinuxバイナリとは異なります-ほとんどのシステム(特に file )はそれらを普通の実行可能バイナリではなく共有ライブラリファイルとして扱います。

$ file bin-nopie
bin-nopie: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=ee817f6d5d4f5635a981b1b837b1b0de3b16aacf, not stripped

$ file bin-pie
bin-pie:   ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically
linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=439fc92838d4d0981f99dd967485e5b95a5a0e7b, not stripped

Ubuntuのファイルブラウザー(Nautilus)は独自のファイルタイプ処理を行いません(代わりにlibmagic/file/etc。を使用することを選択します)。これらの上流のライブラリは壊れており、PIEで構築されたバイナリを適切に検出できないため、NautilusはそれらをGUIで実行可能として表示できません。したがって、システムは、それらを他の共有ライブラリと同様に(つまり、実行不可として)処理することを選択します。

ただし、この問題は軽減できます。開発者は、-no-pieオプションを使用してバイナリをコンパイルし、PIEを無効にすることができます(ただし、これによりセキュリティが少し損なわれます)。これにより、libmagic/fileがバイナリファイルを実行可能バイナリとして表示し、そのデータをNautilusに応じて渡すことができます。あるいは、開発者(またはエンドユーザー)は、バイナリを指す.desktopファイルを作成できます。これは、メタデータとアイコンファイルの追加を可能にし、全体的にきれいなユーザーエクスペリエンスを作成するため、GNOMEチームによる「推奨」回避策と見なされます。

未解決/関連するバグレポート:

1
Kaz Wolfe

アプリケーションの名前をArucoDetect.appimageに変更します。

0
Tim