[英]Can't run executables from nautilus
(显示的警告)在Ubuntu 18.04上,我使用g++ test.cpp -o test
编译了一个仅包含stdio.h和一个空主函数的c ++示例。
没有错误弹出,从终端运行它也没有问题。
但是,一旦我继续使用nautilus并尝试通过单击test
来运行它,就会弹出警告,要求我选择一个程序来打开共享库。
如何确保程序被编译为可执行文件/被文件管理器视为可执行文件?
编辑:可执行文件上的stat输出(重新编译并将其名称更改为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
我注意到您正在尝试使用桌面文件。 那很好。
因为Nautilus已打补丁,以删除执行程序的能力。 这是一个安全问题。
将桌面文件放置在应用程序启动器的正确位置,然后以这种方式打开它,而不是使用Nautilus。 我相信这个位置是$HOME/.local/share/applications
。
该答案假定您的test
程序位于您的主文件夹中,并且/home
具有自己的分区,带有noexec
选项(这是Ubuntu的默认设置)。
noexec不允许直接在已挂载的文件系统上执行任何二进制文件。
这意味着您的系统阻止您在主文件夹上运行测试程序。
如果是这样,则可以将程序移至/home
之外,也可以通过编辑/etc/fstab
文件来更改安装主分区的方式。 参见man fstab
,但是基本上您想添加exec
选项。
其他假设:
test
程序都没有执行权限。 使用$stat test
。 test
推断。 重命名您的程序。 使用交互式shell在命令行的终端仿真器中运行程序。 注意PATH
变量 (您可以通过配置交互式shell(例如,在~/.bashrc
)来更改它)。 您的外壳将使用execve(2) (在globlob之后)运行可执行二进制文件(因此,它应保留在某个可执行分区上, 由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)启动(由shell,您的桌面环境或其他程序完成)。 您应该在终端仿真器中使用外壳程序来启动大多数程序 ,尤其是在开发它们时。 而且,您当然应该期望用户使用外壳程序来运行您的程序(我讨厌用鼠标启动程序),也许是在将您的程序与其他程序结合在一起的一些外壳程序脚本中 。 另请阅读有关Unix哲学的信息 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.