作为一个试图从 Windows 7 迁移的新 Linux“超级用户”,我一直拒绝提出可以通过搜索来回答的基本问题,但我一直坚持这一点。
当我在 Linux 终端中使用 gcc 从 C 创建可执行文件时,称hello.exe
它已被授予X
权限。然后从终端我可以./hello.exe
毫无问题地运行。
但是当我尝试从 Caja 运行它时,它只是将其组件显示为文本文件。但是,我可以选择“以管理员身份运行”,但随后我必须输入登录密码。
这与启用这两个设置中的哪一个无关:
- 打开可执行文本文件时运行它们。
- 打开可执行文本文件时查看它们。
不过,我将其保留为第二个设置,否则每次查看或编辑文本文件时都会被问到我想做什么。
我尝试使用sudo caja
(需要密码)从终端启动 Caja,但是 Caja 不会运行可执行文件 根本不因为“运行”选项不再存在。
如何直接从 Caja 运行可执行文件:双击?
编辑:您可以运行可执行文件吗任何只需双击即可打开文件管理器?
编辑 2:现在使用 Nemo 文件管理器运行 Mint Cinnamon,但问题基本相同。我是否缺少一些允许直接运行可执行文件的设置?
编辑3:
在我的研究过程中我发现
GNOME 正在删除 Nautilus 启动二进制应用程序的能力:
“或者,换句话说,你将无法使用 Nautilus 双击程序、脚本或应用程序来启动它们。” (2018年5月)
正如我怀疑文件管理器作者将它们开发为开源代码的衍生物(或者可能使用通用系统组件)一样,也许他们现在都没有这样做。
我还找到了这个维基百科页面文件管理器的比较有各种桌子。那个叫文件特征最后一栏是“运行可执行文件”,所以我尝试了其中的几个文件管理器。
- 没有任何其中一些将运行我编译的可执行文件(其中一些甚至不允许轻松访问我的工作驱动器 - 这永远不是系统驱动器)。
但无论如何,我现在发现了一个简单的解决方法,那就是我最喜欢的文本编辑器 Geany 将通过单击或按 F5 按键来运行当前源文件的可执行文件(如果存在),而不会将其放入项目中。
答案1
是的,您可以从文件管理器(例如 Caja)运行可执行文件。
hello.c
假设您的主目录中有一个文件,/home/User
其中包含一个没有 GUI 的简单“hello, world”程序,例如:
#include <stdio.h>
int main()
{
printf("hello, world\n");
}
程序运行后编译gcc -o hello hello.c
生成可执行文件hello
。
要直接从 Caja 启动hello
,您可以提供一个启动器来启动终端并在其中运行可执行文件,或者您可以提供带有简单 GUI 的可执行文件。
如果您打算使用启动器,那么在执行任何其他操作之前(除非您之前已经执行过此操作),最好打开一个终端,转到“首选项”,添加一个名为“HoldOpen”的新配置文件,然后设置“当命令退出时”将该配置文件的“命令”选项卡上的“保持终端打开”。否则,终端将打开、运行程序,然后在您从启动器启动时看到任何结果之前关闭。
然后为该hello
程序创建一个启动器。启动器只是一个带有.desktop
扩展名的文本文件;从概念上讲,它类似于 Windows 快捷方式。当文件出现在 Caja 中时,扩展.desktop
名不会显示,但在终端的目录列表中可见。一个简单的启动器,应按原样保存hello.desktop
:
[Desktop Entry]
Version=1.0
Type=Application
Name=hello
Comment=
Exec=mate-terminal --profile=HoldOpen -e "/home/User/hello"
Icon=
Path=
Terminal=false
StartupNotify=false
启动器可以手动编写,或者(如上面的那样)通过右键单击桌面,选择“创建启动器...”,并至少填写“名称”和“命令”框(后者对应于“Exec”键)。
双击 Caja 中的启动器文件应hello
在其自己的终端中启动并在其中显示其输出。
请注意,“Terminal”键设置为“false”,因为它实际上是正在运行的 mate-terminal,并且hello
是在 mate-terminal 中运行。
另请注意,如果您使用 gnome-terminal 而不是 mate-terminal,则可能需要在“hello, world”之前添加几个换行符才能在终端中看到输出。
有关启动器的更多信息,请参阅 Freedesktop.org桌面入门规格。
另一种允许在 Caja 中直接双击运行程序而不需要启动器的替代方案是使用 Zenity 应用程序根据需要生成 GUI 对话框,从而为程序提供简单的 GUI。您应该能够通过运行来安装 Zenity sudo apt-get install zenity
。然后,可以用stdlib和系统调用替换hello.c程序中的stdio printf语句来显示对话框:
#include <stdlib.h>
int main()
{
system("zenity --info --title='Hello' --text='hello, world'");
}
man zenity
有关 Zenity 应用程序的更多信息,请参阅 参考资料。