封尘网

让学习成为一种习惯!

ubuntu系统使用shotcut添加字幕时不能输入中文的解决方法

由于shotcut软件启动时无法在编辑器里输入中文导致了添加字幕,或者对中文处理不方便。于是在网上找了很多资料,终于看到一个deepin朋友遇到的是一样的情况。但是我直接在ubuntu上不能同样操作。

 

 

于是就出现了下文的操作记录。

 

解决方法就是加一个文件到该目录下

找到系统中的文件:
/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so

复制到以下目录下:
/snap/shotcut/692/Shotcut.app/lib/qt5/platforminputcontexts/

但是并没有所想那样顺利,于就是有一堆问题出来了。

遇到权限问题

root@15IKBN:/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts# cp libfcitxplatforminputcontextplugin.so /snap/shotcut/692/Shotcut.app/lib/qt5/platforminputcontexts/libfcitxplatforminputcontextplugin.so cp: 无法创建普通文件'/snap/shotcut/692/Shotcut.app/lib/qt5/platforminputcontexts/libfcitxplatforminputcontextplugin.so': 只读文件系统

 

 

已经是root用户了,为何还是不能写入文件呢?

 

其实上面不容易看到问题。如果使用mv命令时就更加明白什么问题了,看下面,它提示了一个跨设备,linux中一切皆文件,所以设备也是文件。

root@15IKBN:/var/lib/snapd/snaps# mv /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /snap/shotcut/692/Shotcut.app/lib/qt5/platforminputcontexts/libfcitxplatforminputcontextplugin.so
mv: 无法进行跨设备的移动:'/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so' 至'/snap/shotcut/692/Shotcut.app/lib/qt5/platforminputcontexts/libfcitxplatforminputcontextplugin.so';无法删除目标: 只读文件系统

 

 

查看系统中的设备

root@15IKBN:/var/lib/snapd/snaps# lsblk |grep shotcut
loop1                 7:1    0  80.2M  0 loop /snap/shotcut/692

这个loop1设备是随机分配的。
root@15IKBN:/var/lib/snapd/snaps# df -lh|grep shotcut
/dev/loop1                 82M   82M     0  100% /snap/shotcut/692

 

核对文件格式

root@15IKBN:/var/lib/snapd/snaps# mount |grep shotcut
/var/lib/snapd/snaps/shotcut_692.snap on /snap/shotcut/692 type squashfs (ro,relatime)


root@15IKBN:/var/lib/snapd/snaps# file /var/lib/snapd/snaps/shotcut_692.snap
/var/lib/snapd/snaps/shotcut_692.snap: Squashfs filesystem, little endian, version 1024.0, compressed, -3416822521792561152 bytes, -1962213376 inodes, blocksize: 512 bytes, created: Mon Jun 29 13:06:42 2076

可以看到上面的提示squashfs filesystem 居然是用于 Linux 的压缩只读文件系统。详细可参考:

https://www.kernel.org/doc/html/latest/filesystems/squashfs.html

 

最后个人简单理解:因为ubuntu中使用了snap管理工具来安装的shotcut软件的,而snap安装的软件是以挂载的方式,添加到系统中。而这个挂载的方式正是使用了squashfs文件系统。这系统又是以只读方式压缩处理的,所以不能直接对文件修改。要对压缩文件修改就要先解压,再修改,然后重新打包即可。

 

上面差不多都是废话,现在真正解决问题的时候

  • 卸载已经挂载的shotcut

    umount /dev/loop1   #每台机器不同,根据mount|grep shotcut返回的来操作
    

     

  • 复制文件到/tmp目录下方便操作

    mkdir /tmp/te
    cp /var/lib/snapd/snaps/shotcut_692.snap /tmp/te/
    

     

  • 解压文件并对文件修改

    unsquashfs shotcut_692.snap
    cd squashfs-root/Shotcut.app/lib/qt5/platforminputcontexts/
    
    进入对应目录后,执行下面命令把系统中的文件复制到当前目录下。
    cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so .
    
    通过查看其它文件也是755的,所以就给它一样的权限
    chmod 755 libfcitxplatforminputcontextplugin.so
    

     

  • 打包修改过的文件

    mksquashfs squashfs-root/ shotcut_692.snap -comp xz  
    

     

  • 替换文件shotcut_692.snap

    cp shotcut_692.snap /var/lib/snapd/snaps/
    

     

  • 重新挂载即可使用

    mount /var/lib/snapd/snaps/shotcut_692.snap /snap/shotcut/692/
    
    这里注意一下,因为snap安装时shotcut编了一个号692不同机器不一样。但是它在上面检查时使用mount命令可以看到,所以这里挂载时要对应上不然点击图标时是不能打开的。
    

     

完成上面操作后就可以在shotcut里添加滤镜文本直接输入中文了。

 

参考:

Deepin系统下shotcut无法输入中文的一种有效的解决方法

https://www.bilibili.com/read/cv9524524

 

提醒:本文最后更新于 473 天前,文中所描述的信息可能已发生改变,请谨慎使用。