V20文件管理器中添加 在管理员身份终端中打开 选项
Tofloor
poster avatar
花心胡萝卜
deepin
2020-06-09 20:02
Author
本帖最后由 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. "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
  2. "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">

  3.   LinuxDeepin
  4.   https://www.deepin.com/
  5.   
  6.     Authentication is required to run the Deepin Terminal
  7.     启动管理员终端需要输入密码
  8.     folder
  9.    
  10.       no
  11.       no
  12.       auth_admin_keep
  13.    
  14.     /usr/bin/deepin-terminal
  15.     true
  16.   


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.     /usr/bin/deepin-terminal
        true
Copy the Code


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

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


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


另外, 运行
deepin-terminal -h

可以查看到帮助:

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





Reply Favorite View the author
All Replies
avatar
jingle
deepin
2020-06-09 21:27
#1
Reply View the author
avatar
花心胡萝卜
deepin
2020-06-09 22:32
#2
https://bbs.deepin.org/post/195735
https://dl.bintray.com/app4deepin/App4Deepin/pool/main/d/dde-fm-root/

啊?重复造轮子了??
Reply View the author
avatar
花心胡萝卜
deepin
2020-06-09 23:09
#3
https://bbs.deepin.org/post/195735
https://dl.bintray.com/app4deepin/App4Deepin/pool/main/d/dde-fm-root/

大哥你看清楚, 我这是从管理员权限终端打开, 不是从文件管理器打开...我白白配图了.....
Reply View the author
avatar
神末shenmo
deepin
Spark-App
Q&A Team
2020-06-09 23:22
#4
两个问题:为什么需要第二步操作是否可以讲解?deepin-terminal -w这个w是啥? 还有请把gedit换成dedit
Reply View the author
avatar
jingle
deepin
2020-06-10 00:53
#5
https://bbs.deepin.org/post/195735
大哥你看清楚, 我这是从管理员权限终端打开, 不是从文件管理器打开...我白白配图了..... ...

sorry  现在有一个文管从终端打开  你只是管理员加了吧
Reply View the author
avatar
wubozh
deepin
2020-06-10 05:19
#6
请教楼主,我想要个在文本文件上点右键,“用管理员身份编辑”,这个功能应该怎么实现?我试了两种办法,一种是Exec=pkexec /usr/bin/dedit  %U,另一种办法是sudo -S命令传递管理员密码到调用dedit的脚本中去,两种办法都不成功。楼主的第二步是什么原理?
Reply View the author
avatar
q77190858
deepin
2020-06-10 05:46
#7
直接从终端打开,再su进入root模式就可以了,为什么还要添加这个右键菜单呢?
Reply View the author
avatar
花心胡萝卜
deepin
2020-06-10 18:40
#8
https://bbs.deepin.org/post/195735
请教楼主,我想要个在文本文件上点右键,“用管理员身份编辑”,这个功能应该怎么实现?我试了两种办法,一 ...

可以通过 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. /usr/bin/deepin-terminal
  2.     true
Copy the Code
这样GUI程序就能运行了.
如果没有这个文件, 你可以从终端运行一个pkexec deepin-terminal 试试, 就会发现
  1. Gtk-WARNING **: 11:32:42.067: cannot open display:
Copy the Code
这样的错误.
Reply View the author
avatar
花心胡萝卜
deepin
2020-06-10 19:27
#9
本帖最后由 hxhlb 于 2020-6-10 11:42 编辑
https://bbs.deepin.org/post/195735
请教楼主,我想要个在文本文件上点右键,“用管理员身份编辑”,这个功能应该怎么实现?我试了两种办法,一 ...

1. 我系统中有 dedit 和 deepin-editor 两个程序, 从外观上讲, 基本一毛一样. 但是dedit貌似不接受命令行参数, 建议用 deepin-editor 代替.
2. 提供的 policy 文件:
/usr/share/polkit-1/actions/com.deepin.pkexec.dedit.policy

内容:

  1. "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
  2. "http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">

  3.   LinuxDeepin
  4.   https://www.deepin.com/
  5.   
  6.     Authentication is required to run the Deepin Editor
  7.     启动管理员深度编辑器需要输入密码
  8.     folder
  9.    
  10.       no
  11.       no
  12.       auth_admin_keep
  13.    
  14.     /usr/bin/deepin-editor
  15.     true
  16.   


Copy the Code



注意, action_id 要唯一, 下边的 org.freedesktop.policykit.exec.path 和 org.freedesktop.policykit.exec.allow_gui 要写对, 其他就没什么了.


desktop文件:
/usr/share/deepin/dde-file-manager/oem-menuextensions/deepin-dedit-as-admin.desktop

内容:
  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了.
如图:






Reply View the author
avatar
wubozh
deepin
2020-06-12 01:12
#10
https://bbs.deepin.org/post/195735
1. 我系统中有 dedit 和 deepin-editor 两个程序, 从外观上讲, 基本一毛一样. 但是dedit貌似不接受命令行 ...

万分感谢,确实可以了,一直没找到原因。其实对新手来说,面对UOS的权限管理,就这两个不方便的地方,一个是用管理员打开没权限的文件夹,一个是用管理员身份编辑无权限的配置文件。建议UOS官方在用户打开开发者模式后开放这两个功能。
Reply View the author
avatar
花心胡萝卜
deepin
2020-06-12 18:11
#11
https://bbs.deepin.org/post/195735
万分感谢,确实可以了,一直没找到原因。其实对新手来说,面对UOS的权限管理,就这两个不方便的地方,一 ...

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