Не могу запустить исполняемые файлы из nautilus - PullRequest
0 голосов
/ 18 мая 2018

(отображается предупреждение) В Ubuntu 18.04 я скомпилировал пример c ++, который включал только stdio.h и пустую основную функцию, используя g++ test.cpp -o test.

Никаких ошибок не возникло, и у меня не было проблем с запуском его из терминала.

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

Как убедиться, что программа скомпилирована как исполняемый файл / рассматривается файловым менеджером как исполняемый файл?

Редактировать: вывод статистики на исполняемый файл (перекомпилирован и изменено имя на asdff):

File: asdff
  Size: 10600       Blocks: 24         IO Block: 4096   regular file
Device: 808h/2056d  Inode: 4200517     Links: 1
Access: (0755/-rwxr-xr-x)  Uid: ( 1000/  miguel)   Gid: ( 1000/  miguel)
Access: 2018-05-18 15:22:58.009993285 +0100
Modify: 2018-05-18 15:22:58.009993285 +0100
Change: 2018-05-18 15:22:58.009993285 +0100
Birth: -

df output on the same executable:


Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda8      128206036 102694048  18956444  85% /

desktop entry:

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=asdff
Exec=./home/miguel/Desktop/asdff
Icon=/home/miguel/Desktop/index.png

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

В этом ответе предполагается, что ваша test программа находится в вашей домашней папке и что /home имеет свой собственный раздел с параметром noexec (это значение по умолчанию в Ubuntu).

man mount говорит:

noexec Не разрешать прямое выполнение любых двоичных файлов в смонтированной файловой системе.

Это означает, что ваша системазапрещает запуск вашей тестовой программы в вашей домашней папке.

Если это так, вы можете переместить вашу программу за пределы /home или изменить способ монтирования вашего домашнего раздела, отредактировав файл /etc/fstab,См. man fstab, но в основном вы хотите добавить опцию exec.


Другая гипотеза:

  1. По какой-то причине ваша test программа не имеетвыполнить представление.Проверьте это с помощью $stat test.
  2. По какой-либо причине имя, которое вы дали своей тестовой программе, выводится с помощью встроенной в системную оболочку команды test.Переименуйте вашу программу.
0 голосов
/ 19 мая 2018

Я заметил, что вы пытались использовать файл рабочего стола.Это хорошо.

Поскольку Nautilus исправлен, чтобы убрать возможность выполнения программ.Это проблема безопасности.

Поместите файл рабочего стола в нужное место для запуска приложений и откройте его таким образом, а не с помощью Nautilus.Я считаю, что это $HOME/.local/share/applications.

0 голосов
/ 18 мая 2018

Запустите вашу программу в эмуляторе терминала в командной строке , используя интерактивную оболочку . . Будьте в курсе PATH переменная (вы можете изменить ее, настроив интерактивную оболочку, например, в ~/.bashrc).Ваша оболочка будет использовать execve (2) (после globbing ) для запуска вашего исполняемого бинарного файла (поэтому он должен оставаться на каком-то исполняемом разделе, как ответил )по YSC и быть исполняемым - см. stat (2) ).Вы хотите увидеть stdout и stderr выходных данных вашей программы.См. Также этот ответ.

Используйте g++ со всеми предупреждениями и информацией отладки, поэтому g++ -Wall -Wextra -g.Избегайте именования test вашей программы (это имя конфликтует с test (1) ).Если ваш исполняемый файл использует другие библиотеки, вам может потребоваться явно указать rpath во время ссылки.

Только в том случае, если ваша программа является GUI программой (например, кодируется для набор инструментов для виджетов как Qt ), если вы хотите (в конечном итоге) запустить его на своем рабочем столе одним щелчком мыши (подробности могут быть связаны с средой рабочего стола ),Вы будете беспокоиться об этом гораздо позже (и, вероятно, даже не должны, и оставите это бремя для своего пользователя или упаковщика вашей программы).

Я делаюВы уверены, что программа [....] рассматривается как исполняемый файл файловым менеджером?

Это вопрос системного администратора, который может зависеть от вашей среды рабочего стола или оконный менеджер .Сначала я не буду беспокоиться, но позже у вас может быть некоторая настольная запись (в некоторых файлах, заканчивающихся .desktop), описывающая вашу программу.Поэтому используйте редактор, чтобы создать этот asdff.desktop текстовый файл (он, вероятно, должен находиться в вашем каталоге $HOME/Desktop/ и должен содержать абсолютные пути к файлам).

Exec=./home/miguel/Desktop/asdff

. является опечаткой, должно быть Exec=/home/miguel/Desktop/asdff без какой-либо точки.

Каждая программа в Linux запускается с помощью execve (2) (сделанооболочкой, средой рабочего стола или другой программой).Вы должны использовать оболочку в эмуляторе терминала для запуска большинства ваших программ , особенно при их разработке.И, конечно же, вы должны ожидать, что ваши пользователи будут запускать вашу программу со своей оболочкой (я ненавижу запускать программы с помощью мыши), возможно, в каком-нибудь сценарии оболочки , объединяющем вашу программу с другими.Читайте также о философии Unix .

...