You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为Caja文件管理器添加「以root身份运行」右键菜单选项?

解决Caja文件管理器添加「以root身份运行」右键菜单的方案

我之前也碰到过这个问题——Nautilus的方法完全不适用于Caja,毕竟MATE的文件管理器扩展机制和GNOME的不一样。下面是我亲测有效的两种方案,你可以根据需求选:

方案一:用脚本快速实现(简单易上手)

Caja自带了脚本扩展功能,只要把脚本放到指定目录就能用,不用折腾复杂的扩展开发:

  1. 创建右键脚本文件
    打开终端,输入命令创建脚本:

    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退出编辑器。

  2. 给脚本加执行权限
    没有权限的话脚本跑不起来,执行这条命令:

    chmod +x ~/.local/share/caja/scripts/Open_as_Root
    
  3. 重启Caja生效
    把Caja彻底关掉再重新打开:

    caja -q && caja &
    

    现在右键点击文件或目录,就能在「Scripts」子菜单里看到「Open_as_Root」选项了。

方案二:用Python扩展集成到右键根菜单(更美观)

如果不想每次都点Scripts子菜单,想把选项直接放在右键根目录里,用Caja的Python扩展就能实现:

  1. 创建扩展文件
    先建个扩展目录(如果不存在的话):

    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
    
  2. 创建扩展描述文件
    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
    
  3. 设置权限并重启Caja
    给Python脚本加执行权限:

    chmod +x ~/.local/share/caja/extensions/caja-open-as-root.py
    

    重启Caja:

    caja -q && caja &
    

    现在不管是右键点击文件,还是在空白处右键,都能直接看到「以root身份打开」的选项了。

小坑提示

  • 如果点击后没反应,先检查有没有装pkexec(大部分系统自带),要是没有就装gksusudo apt install gksu,然后把脚本里的pkexec换成gksu
  • 有时候光重启Caja不够,注销再登录一次就好了。

内容的提问来源于stack exchange,提问作者brunoais

火山引擎 最新活动