一般情况下,我们写了一个GUI程序,想要像火狐或者等其它程序一样在桌面显示我们的快捷方式,并且单击就可以启动,不需要使用终端命令行的方法和Windows有很大的区别

Windows上的EXE程序点击Windows内核会自动装载到内存,自动解析PE文件格式,而Linux下不一样,Linux思想就是终端shell,而非可视化GUI,所以Linux对GUI支持并不高,很多发行版如Ubnutu,就是所有Debian发行版里比较受欢迎的一个桌面版,每个发行版都提供一些针对生成桌面快捷方式的方法。

Linux内核本身并不支持这样的方法,而Ubnutu只是在Debian的发行版上增加了自己的桌面而已,也就是一个程序,并且在内核启动时的入口函数完成所有初始化后第一个调用的入口函数。

首先Ubnutu的桌面快捷文件存放在“/usr/share/applications”路径下(一般基于debian的内核都在这个目录下)

进入到这个目录下会看到很多文件:

均以.desktop结尾,这是debian系统的桌面启动程序认的文件后缀

这些文件内容是以“Desktop Entry”类型为格式

在第一行一定要写[Desktop Entry]指明为桌面快捷配置文件,否则debian的桌面管理器不认

下面介绍一下常用关键字:

  • 关键字"Name":[必选]
      该数值指定了相关应用程序的名称。

  • 关键字"GenericName":[可选]
      该数值指定了相关应用程序的通用名称。

  • 关键字"Comment":[可选]
      该数值是对当前Desktop Entry的简单描述。

  • 关键字"Type":[必选]
      关键字"Type"定义了Desktop Entry文件的类型。常见的"Type"数值是"Application"和"Link"。"Type = Application"表示当前Desktop Entry文件指向了一个应用程序;而"Type = Link"表示当前Desktop Entry文件指向了一个URL (Uniform Resource Locator)。

  • 关键字"Exec":[可选]
      关键字"Exec"只有在"Type"类型是"Application"时才有意义。"Exec"的数值定义了启动指定应用程序所要执行的命令,在此命令是可以带参数的。在本例中,关键字"Exec"的数值是字符串"gnome-open /usr/share/doc/manual/sled-gnome-cbt_en/index.html"。在shell中输入该字符串并按回车键同样可以启动指定应用程序。

  • 关键字"URL":[可选]
      关键字"URL"只有在"Type"类型是"Link"时才有意义。"URL"的数值定义了该Desktop Entry文件指向的URL。

  • 关键字"Icon":[可选]
      该数值定义了当前Desktop Entry文件在应用程序浏览器或是在文件浏览器中所显示的图标。如果关键字"Icon"的数值是以绝对路径的格式给出,那么其数值所指定图标文件将被使用;反之,Linux系统将使用"Icon Theme Specification"在系统指定图标目录下定位所需要使用的图标文件。

  • 关键字"Terminal":[可选]
      和"StartupNotify"一样,关键字"StartupNotify"的数值也是布尔值,并且该关键字只有在"Type"类型是"Application"时才有意义。其数值指出了相关应用程序(即关键字"Exec"的数值)是否需要在终端窗口中运行。

基本上就像写windows下的ini文件一样简单,只需要将上面的必选项配置完成基本上就大功告成了。

下面是我写的一个配置选项:

简简单单的配置,我们可以在ubnutu的桌面管理器里找到它

注意有的时候可能ubnutu需要更新,需要等待几十秒左右才能看见

点击即会正常运行

如果你的程序是终端程序,需要shell,那么需要把“Terminal”字段设置为true

如果我们的程序需要管理员权限呢?

答:

pkexec,gksu已经被ubnutu淘汰了,取而代之的是pkexec

只需要在前面加上pkexec即可:

注意可能会出现这样的情况:

Unable to init server: 无法连接: 拒绝连接

(Weye_RadarState:85711): Gtk-WARNING **: 00:38:53.716: cannot open display:

这个原因是因为su不能拥有当前用户的屏幕,有很多人说用xhost +,但是博主试过,但是无效

这里有两种解决方案,第一种是将Terminal设置为true,然后把pkexec替换成sudo

每次运行都会弹出终端让你输入密码:

但是很明显,我们的程序属于application的不属于CUI而是GUI,这不符合风格

第二种方法就是使用pkexec指定环境用户

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY

将屏幕以及x服务都提供给root用户,这样就拥有了屏幕所有权

注意如果使用pkexec需要把Terminal设置为false或者直接去掉,否则会秒退

但是启动时还是秒退

经过博主的测试与调试发现,你需要在当前目录下生成一个.sh文件

然后把命令写进去

在指定

然后在运行即可:

大功告成

如何生成桌面快捷方式呢?

我们只需要在把desktop文件,复制到桌面即可

然后右键会看到一个允许启动

选中即可

这样桌面就生成我们的图标了

如何把图标添加到左侧呢?

首先点击这里:

在搜索栏里搜索你的程序,然后右键添加到收藏夹即可

当你把程序添加到收藏夹时会出现两个图标的问题:

可以看到我们从收藏夹里打开我们的程序,但是却生成了一个新的图标。

这是因为不符合通知协议

在通知协议里有一个StartupNotify协议,它负责决定StartupWMClass是否有效

而StartupWMClass是决定是否开启一个新的窗口,当它的值与窗口名称一致是且StartupNotify为false的情况下,则通知方式不会开启一个新的图标,直接在收藏栏图标上打开。

所以我们在刚刚的desktop文件里修改一下

[Desktop Entry]
Name=WeyeDataHub
Comment=JM Data Server
Type=Application
Icon=/usr/bin/WeyeDataHub/image/ico/jm.ico
Exec=sh /usr/bin/WeyeDataHub/app/start.sh
StartupNotify=false
StartupWMClass=WeyeDataHub

但是遗憾的是还是无效,我仔细去阅读了一下desktop的桌面通知协议,发现StartupWMClass的值要与程序文件名的值一致,而不是Name值一致。

Name变量只是显示的是程序在通知栏与桌面快捷方式显示的名字。

所以我把StartupWMClass这里改成了执行程序的名字:

[Desktop Entry]
Name=WeyeDataHub
Comment=JM Data Server
Type=Application
Icon=/usr/bin/WeyeDataHub/image/ico/jm.ico
Exec=sh /usr/bin/WeyeDataHub/app/start.sh
StartupNotify=false
StartupWMClass=RadarSimSystem.elf

然后就成功了

若你不确定文件名,则可以使用这个命令:

xprop WM_CLASS

在你程序窗口处于打开的情况下,在新建一个终端窗口里输入这个命令,然后你的鼠标样式就会变成十字样式,然后点击一下你的窗口。

第二个就是你窗口的实际文件名,把这个复制到desktop里就可以了。

Linux开发_最全在Ubnutu环境下为你的程序设置快捷启动项和启动时管理员权限相关推荐

  1. Linux环境下多线程C/C++程序的内存问题诊断

    目录 说明 常见的内存错误举例 常见的内存访问错误有以下几种: 内存问题定位步骤 野指针 内存释放后使用(UaF,Use after Free) 内存问题检查工具 常见的内存问题检查工具 Valgri ...

  2. FD.io VPP环境下运行用户应用程序教程

    FD.io VPP环境下运行用户应用程序教程 RToax 2020年9月 相关文章:<FD.io VPP利用iperf3进行UDP灌包测试-英特尔X520万兆网卡> 1. VPP简介 VP ...

  3. 在Keil MDK编译环境下使用UEstudio编写程序

    在Keil MDK编译环境下使用UEstudio编写程序 由于一些原因目前只能使用ulink2来调试arm微处理器,因此不得不放弃iar与jlink.转入MDK的阵营后,为了减小对自己的习惯的影响,今 ...

  4. Linux 开发中的常用命令 ( Cygwin 环境也同样适用)

    ls #以默认方式显示当前目录文件列表 ls –a #显示所有文件包括隐藏文件 ls –l #显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls –color=never *.so ...

  5. linux rpm找不到命令_linux环境下 python环境import找不到自定义的模块

    linux环境下 python环境import找不到自定义的模块 问题现象: Linux环境中自定义的模块swport,import swport 出错.swport模块在/root/sw/目录下. ...

  6. network setup service启动后自动停止_一个简单的测试环境下的自动化部署方案

    笔者是公司是一个分前后端开发的公司.而笔者是一个普通的后端开发工程师.在和前端工程师协同开发时,为了给前端工程师提供接口,往往要将写好的代码交付并部署到测试环境.因而这导致笔者经常需要打包项目更新到测 ...

  7. JSP→JavaWeb简介、Tomcat服务器安装启动测试目录、Tomcat手动创建项目、开发工具MyEclipse与Eclipse配置环境、MyEclipse创建Web程序目录、修改Tomcat端口

    动态网页的动态指的是能与用户进行交互 Tomcat官网http://tomcat.apache.org/ Tomcat服务器安装启动测试目录 Tomcat手动创建项目 修改服务器配置生效需要重启!重启 ...

  8. linux如何运行java程序,Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...

  9. Python开发【项目】:生产环境下实时统计网站访问日志信息

    日志实时分析系统 生产环境下有需求:要每搁五分钟统计下这段时间内的网站访问量.UV.独立IP等信息,用直观的数据表格表现出来 环境描述: 网站为Nginx服务,系统每日凌晨会对日志进行分割,拷贝到其他 ...

最新文章

  1. php base64解码图片 base64加密图片还原
  2. java JDBC连接Oracle数据库的方法
  3. 如果边横向移动边扔球,球会怎么运动?
  4. 每日一题:leetcode173.二叉搜索树迭代器
  5. (转)nmake学习笔记
  6. html 头尾代码自动,HTML Head Generator - 纯 CSS 实现的头部元标签代码生成器 - 钉子の次元...
  7. 被裁员 60%,以太坊大神忍不住要洗白了
  8. c++ 可变参数_深入剖析ProE可变扫描特征原理、操作和应用方法
  9. SQL Server中的日期类型
  10. 【linux】如何查看和解压缩rpm文件内容
  11. G代码在运动控制器上的应用
  12. 5.2php小说网站源码,【PHP源码】杰奇小说源码V2.20仿《不朽文学网》原创小说网站系统程序(采集+支付+VIP)...
  13. 『概率知识』伯努利试验及n重伯努利试验+方差协方差理解!
  14. [渝粤教育] 兴义民族师范学院 数据结构 参考 资料
  15. android 圆角 水波纹_Android实现水波纹点击效果
  16. centos添加硬盘
  17. 区块链PoP(Proof of Peer)共识介绍
  18. 云服务器配置java环境
  19. 互联网行业,回暖了?
  20. python 重复图片_删除重复文件或图片(去重)的python代码

热门文章

  1. 虚拟交换机软件_千兆交换机如何识别优劣,千兆交换机识别方法!
  2. python资源网站_Python 博客网站资源
  3. python修改json文件_python修改json文件的value实例方法
  4. 查看mysql的默认存储引擎信息_如何查看mysql的默认存储引擎
  5. java sdk他edk de区别_最低SDK版本/目标SDK版本与编译SDK版本之间有什么区别?
  6. matlab求数的因子,matlab中因子分析的函数factoran如何使用??
  7. c#生成token访问的接口_python测试开发django60.token登录(TokenAuthentication)
  8. fiddler everywhere使用_用Fiddler抓取iOS https流量
  9. 的级联选择_OpenCV-Python 级联分类器 | 六十二
  10. python中flush什么意思,Python的file.flush()到底在做什么?