Не могу запустить исполняемые файлы из nautilus

(предупреждение, которое появляется) На 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

0

Решение

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

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

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

2

Другие решения

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

man mount говорит:

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

Это означает, что ваша система не позволяет запускать тестовую программу в вашей домашней папке.

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


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

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

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

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

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

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

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

Exec=./home/miguel/Desktop/asdff

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

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

0
По вопросам рекламы [email protected]