• 社区首页
  • 版块
V20文件管理器中添加 在管理员身份终端中打开 选项
体验心得914个浏览 ·11个评论
电梯直达到第
hxhlb
发表于2020-06-09
楼主
本帖最后由 hxhlb 于 2020-6-10 11:29 编辑

这个在管理员身份终端中打开, 对应的是 在终端中打开的那个选项.
论坛中很多网友都分享了如何为文件管理器添加右键菜单.
既然这样, 咱们就仿照着来加一个 在管理员身份终端中打开.

第一步, 打开终端, 进入目录  (或者用文件管理器进去, 看自己喜欢)
/usr/share/deepin/dde-file-manager/oem-menuextensions

编辑一个文件(不会用vi的就用dedit或者其他的可视化编辑器来搞, 记得使用sudo):
deepin-terminal-as-admin.desktop

内容如下:
  1. [Desktop Entry]
  2. Type=Application
  3. Exec=pkexec /usr/bin/deepin-terminal -w %U
  4. GenericName=OpenInTerminalAsAdministrator
  5. Name=OpenInTerminalAsAdministrator
  6. MimeType=inode/directory;
  7. GenericName[zh_CN]=在管理员身份终端中打开
  8. GenericName[en]=OpenasAdministrator
  9. Name[zh_CN]=在管理员身份终端中打开
  10. Name[en]=OpenInTerminalAsAdministrator
Copy the Code
第一步完成, 此时, 右键文件管理器空白处, 应该就有菜单了. 没有菜单请启动一个新的文件管理器.

但是问题出现了, 你会发现, 点击了之后, 输入了密码, 但是没有什么效果, 什么都没出来.
这是因为,  添加这个功能需要进行2步, 除了第一步的常规操作, 还需要在新建一个文件.

进入目录
/usr/share/polkit-1/actions

创建文件
com.deepin.pkexec.deepin-terminal.policy

输入以下内容:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE policyconfig PUBLIC
  3. "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
  4. "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
  5. <policyconfig>
  6.   <vendor>LinuxDeepin</vendor>
  7.   <vendor_url>https://www.deepin.com/</vendor_url>
  8.   <action id="com.deepin.pkexec.deepin-terminal">
  9.     <message>Authentication is required to run the Deepin Terminal</message>
  10.     <message xml:lang="zh_CN">启动管理员终端需要输入密码</message>
  11.     <icon_name>folder</icon_name>
  12.     <defaults>
  13.       <allow_any>no</allow_any>
  14.       <allow_inactive>no</allow_inactive>
  15.       <allow_active>auth_admin_keep</allow_active>
  16.     </defaults>
  17.     <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/deepin-terminal</annotate>
  18.     <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
  19.   </action>

  20. </policyconfig>
Copy the Code
保存之后, 就可以进行骚气的操作了!

两个文件下载.
添加右键管理员终端中打开.tar.gz


效果图如下:


================================================================

20200610更新:

解释一下为什么要第二个policy文件.

通过 man pkexec 来查看它的安全选项, 会发现如下图所描述:

大概意思就是说:
pkexec为了防止通过LD_LIBRARY_PATH或类似机制注入代码,将PROGRAM运行它的环境设置为已知的最小的安全环境, 然后PKEXEC_UID环境变量被设置为调用pkexec的进程的用户ID. 但是因为没有设置 $DISPLAY 和 $XAUTHORITY环境变量, pkexec将不允许以其他用户身份运行X11应用程序. 如果将org.freedesktop.policykit.exec.allow_gui 选项设置为非空值, 就保留这两个变量的设置.

谷歌机翻, 大概就是这意思.

所以, 要想运行, 就得新建一个针对这个程序的 policy 文件, 目录就在 /usr/share/polkit-1/actions, 里边你可以找到deepin给文件管理器设置的文件, 照样抄改就行了.
man pkexec里也有相应的例子, 主要就是设置了以下两行:
  1. <div><span ";="" color:="" rgb(102,="" 102,="" 102);"="">    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/deepin-terminal</annotate></span></div><div><span ";="" color:="" rgb(102,="" 102,="" 102);"="">    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate></span></div>
Copy the Code


这样GUI程序就能正常运行了.当然, action id 也要注意修改!!

在没有新增这个policy文件的时候,  可以从终端运行一个pkexec deepin-terminal 试试, 就会发现


Gtk-WARNING **: 11:32:42.067: cannot open display:
这样的错误.


另外, 运行
deepin-terminal -h

可以查看到帮助:

所以我们正好使用 -w参数来设置启动的终端的启动目录.





回复收藏只看作者
所有回复
jingle超级管理员
发表于2020-06-09
沙发
hxhlb
发表于2020-06-09
板凳

啊?重复造轮子了??
hxhlb
发表于2020-06-09
地板

大哥你看清楚, 我这是从管理员权限终端打开, 不是从文件管理器打开...我白白配图了.....
shenmo
发表于2020-06-09
5楼
两个问题:为什么需要第二步操作是否可以讲解?deepin-terminal -w这个w是啥? 还有请把gedit换成dedit
jingle超级管理员
发表于2020-06-09
6楼

sorry  现在有一个文管从终端打开  你只是管理员加了吧
wubozh
发表于2020-06-09
7楼
请教楼主,我想要个在文本文件上点右键,“用管理员身份编辑”,这个功能应该怎么实现?我试了两种办法,一种是Exec=pkexec /usr/bin/dedit  %U,另一种办法是sudo -S命令传递管理员密码到调用dedit的脚本中去,两种办法都不成功。楼主的第二步是什么原理?
q77190858
发表于2020-06-09
8楼
直接从终端打开,再su进入root模式就可以了,为什么还要添加这个右键菜单呢?
hxhlb
发表于2020-06-10
9楼

可以通过 man pkexec 来查看安全选项, 如图:

大概意思就是说, pkexec为了防止通过LD_LIBRARY_PATH或类似机制注入代码,将PROGRAM运行它的环境设置为已知的最小的安全环境, 然后PKEXEC_UID环境变量被设置为调用pkexec的进程的用户ID. 但是因为没有设置 $DISPLAY 和 $XAUTHORITY环境变量, pkexec将不允许以其他用户身份运行X11应用程序. 如果将org.freedesktop.policykit.exec.allow_gui 选项设置为非空值, 就保留这两个变量的设置.
谷歌机翻, 大概就是这意思.
所以, 要想运行, 就得新建一个针对这个程序的 policy 文件, 目录就在 /usr/share/polkit-1/actions, 里边你可以找到deepin给文件管理器设置的文件, 照样抄改就行了.
man pkexec里也有相应的例子, 主要就是设置了以下两行:
  1. <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/deepin-terminal</annotate>
  2.     <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
Copy the Code
这样GUI程序就能运行了.
如果没有这个文件, 你可以从终端运行一个pkexec deepin-terminal 试试, 就会发现
  1. Gtk-WARNING **: 11:32:42.067: cannot open display:
Copy the Code
这样的错误.
hxhlb
发表于2020-06-10
10楼
本帖最后由 hxhlb 于 2020-6-10 11:42 编辑

内容:
  1. [Desktop Entry]
  2. Type=Application
  3. Exec=pkexec /usr/bin/deepin-editor %U
  4. GenericName=EditAsAdministrator
  5. Name=EditAsAdministrator
  6. GenericName[zh_CN]=以管理员身份编辑
  7. GenericName[en]=EditAsAdministrator
  8. Name[zh_CN]=以管理员身份编辑
  9. Name[en]=EditAsAdministrator
  10. MimeType=text/plain;
  11. X-DFM-MenuTypes=SingleFile;
Copy the Code

设定了单个文件生效, 仅在纯文本文件格式生效.

然后就OK了.
如图:






wubozh
发表于2020-06-11
11楼

万分感谢,确实可以了,一直没找到原因。其实对新手来说,面对UOS的权限管理,就这两个不方便的地方,一个是用管理员打开没权限的文件夹,一个是用管理员身份编辑无权限的配置文件。建议UOS官方在用户打开开发者模式后开放这两个功能。
hxhlb
发表于2020-06-12
12楼

我猜, 如果你去新建了policy文件, 你的原因就是action_id没有唯一.
当然没有新建policy那就是另一个原因了.
在一个, 这个dedit在我系统上确实不接受命令行参数, 只会把文件名显示出来, 文件内容却是空白, 真是奇怪.
发布帖子

光荣榜

  • 周榜
  • 月榜
  • 总榜