由于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