最近、Ubuntuを16.04から18.04に更新しましたが、実行可能ファイルのアイコンがテキストファイルのアイコンと同じであるという問題があります。 (ArucoDetectは実行可能ファイルで、その他は通常のテキストファイルです)
Ubuntu 16.04では、実行可能ファイルには次のような独自のアイコンがあります。
Ubuntu 18.04を構成して、実行可能ファイルに独自の特別なアイコンを持たせるにはどうすればよいですか?
あなたがgccを見つけて行-no-pie
を追加するよりも問題がある場合、Ubuntu 18.04はウェイランドに問題があるため、これはデフォルトの実行可能ファイルです。パイなし!それは私にとってはうまくいきます。
これはMIMEタイプに関係し、ファイルが実行可能かどうかには関係ありません。もちろん、使用するすべてのスクリプトは実行可能ですが、MIMEタイプが異なるという事実は変わりません。
$ file /bin/busybox
/ bin/busybox:ELF 64ビットLSB実行可能ファイル、x86-64、バージョン1(GNU/Linux)、静的にリンク、GNU/Linux 2.6.32用、BuildID [sha1] = 86b86ebdeb1e423dc1672c2a7408fb83ee70eeb1、stripped
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タイプが異なる方法で推測されるため、アイコンが異なります。
出典:
特定のファイルタイプのアイコンを変更するにはどうすればよいですか?
この回答は、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チームによる「推奨」回避策と見なされます。
未解決/関連するバグレポート:
アプリケーションの名前をArucoDetect.appimageに変更します。