如何为Caja文件管理器添加「以root身份运行」右键菜单选项?
解决Caja文件管理器添加「以root身份运行」右键菜单的方案
我之前也碰到过这个问题——Nautilus的方法完全不适用于Caja,毕竟MATE的文件管理器扩展机制和GNOME的不一样。下面是我亲测有效的两种方案,你可以根据需求选:
方案一:用脚本快速实现(简单易上手)
Caja自带了脚本扩展功能,只要把脚本放到指定目录就能用,不用折腾复杂的扩展开发:
创建右键脚本文件
打开终端,输入命令创建脚本:nano ~/.local/share/caja/scripts/Open_as_Root然后把下面的内容粘贴进去(如果你的系统没有
gksu,直接换成pkexec就行):#!/bin/bash # 以root身份打开选中的文件/目录 if [ -z "$CAJA_SCRIPT_SELECTED_FILE_PATHS" ]; then # 没选中文件的话,打开当前目录 gksu caja "$CAJA_SCRIPT_CURRENT_URI" else # 逐个处理选中的文件/目录 for file in $CAJA_SCRIPT_SELECTED_FILE_PATHS; do gksu caja "$file" done fi按
Ctrl+O保存,Ctrl+X退出编辑器。给脚本加执行权限
没有权限的话脚本跑不起来,执行这条命令:chmod +x ~/.local/share/caja/scripts/Open_as_Root重启Caja生效
把Caja彻底关掉再重新打开:caja -q && caja &现在右键点击文件或目录,就能在「Scripts」子菜单里看到「Open_as_Root」选项了。
方案二:用Python扩展集成到右键根菜单(更美观)
如果不想每次都点Scripts子菜单,想把选项直接放在右键根目录里,用Caja的Python扩展就能实现:
创建扩展文件
先建个扩展目录(如果不存在的话):mkdir -p ~/.local/share/caja/extensions/然后创建Python扩展脚本:
nano ~/.local/share/caja/extensions/caja-open-as-root.py粘贴下面的代码:
#!/usr/bin/env python3 import gi gi.require_version('Caja', '2.0') gi.require_version('Gtk', '3.0') from gi.repository import Caja, Gtk, GObject class OpenAsRootExtension(Caja.MenuProvider, GObject.GObject): def __init__(self): pass # 右键点击文件/目录时显示的菜单 def get_file_items(self, window, files): if len(files) == 0: return item = Caja.MenuItem( name='OpenAsRoot::OpenAsRoot', label='以root身份打开', tip='以管理员权限打开选中的文件/目录', icon='system-run' ) item.connect('activate', self.on_menu_activate, files) return [item] # 右键点击空白背景时显示的菜单 def get_background_items(self, window, file): item = Caja.MenuItem( name='OpenAsRoot::OpenAsRootBackground', label='以root身份打开当前目录', tip='以管理员权限打开当前目录', icon='system-run' ) item.connect('activate', self.on_background_activate, file) return [item] def on_menu_activate(self, menu, files): paths = [file.get_location().get_path() for file in files] for path in paths: import subprocess subprocess.Popen(['pkexec', 'caja', path]) def on_background_activate(self, menu, file): path = file.get_location().get_path() import subprocess subprocess.Popen(['pkexec', 'caja', path]) if __name__ == '__main__': from gi.repository import Caja Caja.InfoProviderType.MENU_PROVIDER创建扩展描述文件
Caja需要这个文件识别扩展,创建它:nano ~/.local/share/caja/extensions/caja-open-as-root.caja-extension粘贴以下内容:
[Caja Extension] Name=Open as Root Description=Adds a menu item to open files/directories as root Authors=Your Name Version=1.0 Enabled=true Loader=python3 Module=caja-open-as-root设置权限并重启Caja
给Python脚本加执行权限:chmod +x ~/.local/share/caja/extensions/caja-open-as-root.py重启Caja:
caja -q && caja &现在不管是右键点击文件,还是在空白处右键,都能直接看到「以root身份打开」的选项了。
小坑提示
- 如果点击后没反应,先检查有没有装
pkexec(大部分系统自带),要是没有就装gksu:sudo apt install gksu,然后把脚本里的pkexec换成gksu。 - 有时候光重启Caja不够,注销再登录一次就好了。
内容的提问来源于stack exchange,提问作者brunoais




