Исполняемый файл Electron не распознается Nautilus

Я не могу создать исполняемый файл Electron App с помощью следующей команды:

electron-packager . electron-tutorial-app --overwrite --asar=true --platform=linux --arch=x64 --prune=true --out=release-builds

Файл сборки, который является файлом общей библиотеки (application/x-sharedlib), не выполняется на Ubuntu 18. Вместо этого я получаю следующее сообщение об ошибке при открытии файла в Nautilus:

Не удалось отобразить «electron-tutorial-app»

Для файлов "разделяемой библиотеки" не установлено приложение. Вы хотите найти приложение, чтобы открыть этот файл?

[Нет да]

Есть ли способ сделать это?


person Catalyst    schedule 08.03.2019    source источник


Ответы (3)


TL;DR: созданные файлы на самом деле являются исполняемыми файлами нового формата. В них нет ничего плохого. Nautilus/файловые менеджеры по ошибке не распознают их как исполняемые файлы. Есть решения, такие как создание файла *.desktop для запуска приложения.

Анализ

Это явление возникает как побочный эффект изменения в том, как Electron собирает бинарные файлы Linux. Коммит 9294facf изменил двоичный формат с ELF на PIE. Изменение довольно небольшое и затрагивает только один файл (BUILD.gn). Изменение появилось в Electron, начиная с версии 4.0.0.

Файловые менеджеры используют команду file, чтобы решить, что делать с файлом (например, открыть программу просмотра изображений, текстовый редактор или выполнить файл). file не различает разделяемые библиотеки и исполняемые файлы PIE и поэтому неправильно классифицирует файлы PIE (см. соответствующий отчет об ошибке).

Решения

Запустить из терминала

Поскольку проблема существует только для графических файловых менеджеров, вы можете просто запустить исполняемый файл из терминала или из скрипта. Это несколько связано с нетехническими конечными пользователями, а не с тем, что хочет ОП.

Дождитесь исправления вверх по течению

Подождите, пока file распознает PIE как исполняемые файлы. В свою очередь, это, вероятно, приведет к тому, что файловые менеджеры, такие как Nautilus, будут правильно запускать PIE. Неясно, произойдет ли это и когда. Если это произойдет, то, скорее всего, оно будет включено только в будущие выпуски дистрибутивов.

Используйте файл рабочего стола

Создайте файл рабочего стола для запуска приложения. В любом случае это обычный способ запуска настольных приложений.

Создайте файл с именем myapp.desktop со следующим содержимым.

[Desktop Entry]
Name=My Application
Exec=/path/to/binary
Terminal=false
Type=Application
StartupNotify=true
Encoding=UTF-8

Затем пометьте исполняемый файл рабочего стола, введя chmod +x myapp.desktop. Двойной щелчок по файлу должен запустить приложение, как и ожидалось.


Дополнительная информация

Соответствующее обсуждение в проекте electronic-packager: https://github.com/electron-userland/electron-packager/issues/901. (Суть: эта проблема не была вызвана электронным упаковщиком, посмотрите вверх по течению)

Соответствующая проблема в электронном проекте: https://github.com/electron/electron/issues/15406. . (Суть: они хотели включить PIE в Linux. Это не наша ошибка, смотрите выше)

person snwflk    schedule 08.03.2019

Для Linux (Убунту):

  1. Понизить пакет Electron:

    npm установить электрон@3.1.6 --save-dev

Для глобального (при необходимости)

npm install -g [email protected]
  1. Выполнить команду electronic-packager — для linux:

    электрон-упаковщик . electronic-tutorial-app --overwrite --asar --platform=linux --arch=all --prune=true --out=release-builds

Это приведет к 4 папкам Linux (архив = все). Выберите рабочий исполняемый файл в соответствии с вашей ОС.

person Catalyst    schedule 08.03.2019
comment
Понижение версии Electron означает отсутствие многих функций и исправлений ошибок, и его следует рассматривать только в редких случаях. - person snwflk; 08.03.2019

Это проблема, когда electron-packager используется для упаковки приложения Linux с версией Electron 4.0.x, тогда как с предыдущими версиями Electron, такими как 3.1.x, проблем не было.

По какой-то причине в Electron 4.0.x созданный файл приложения представляет собой общую библиотеку, а не исполняемый файл.

В окне терминала запуск команды file по пути к файлу приложения дает:

64-битный общий объект ELF LSB, x86-64, версия 1 (SYSV), динамически связанный, интерпретатор /lib64/ld-linux-x86-64.so.2, для GNU/Linux 3.2.0, BuildID[sha1]= b9e8ba37118dad1bf605affef41026f813215bc6, раздели

в то время как это было:

64-битный исполняемый файл ELF LSB, x86-64, версия 1 (SYSV), динамически связанный, интерпретатор /lib64/ld-linux-x86-64.so.2, для GNU/Linux 2.6.32, удаленный

К счастью, по-прежнему возможно, хотя и громоздко, запустить приложение, запустив его из окна терминала, например, перетащив значок файла приложения в приглашение терминала, а затем набрав Enter.

person Community    schedule 08.03.2019
comment
спасибо, @Mikaeru, ваш ответ побудил меня понизить версию электронной версии и построить ее с другими параметрами в утилите электронного упаковщика. Это работает по крайней мере для Ubuntu Linux. Итак, теперь пытаемся также использовать Windows-машину. Будет обновляться соответственно. - person Catalyst; 08.03.2019