1. 前言
坚果云是一款多平台同步软件,能够实时备份同步工作和学习中很多重要的脚本,配置等文件。
本篇主要介绍一些在deepin操作系统(最新版本deepin V20.2.3)上使用坚果云的经验,供有同样需求的朋友参考。
注:博客中涉及到的部分代码的修改在很久之前完成,因为能正常实现个人需求,就没有复核,能用就行。以后有兴致再优化。
2. deepin安装坚果云
deepin安装坚果云很简单,只需三步即可完成。
建议按照以下三个步骤安装,不要从商店安装坚果云
1.浏览器访问坚果云官方网站下载地址:https://www.jianguoyun.com/s/downloads,下载Linux版本的坚果云deb包
当前Linux版本的坚果云安装包最新版本5.1.2
2.deepin打开终端,执行:sudo apt install libnotify-dev
安装相关依赖
3.找到下载的坚果云deb包,双击安装,输入密码,即可完成坚果云的安装
3. 配置坚果云的同步目录
3.1 重新配置默认放置目录
坚果云默认在当前用户的home目录下创建一个NutStore Files的目录用来放置同步的内容。
但是对于deepin文件管理器来说,在home目录下显示一个NutStore Files有些怪怪的。相比于坚果云,安装的微信就很老实,乖乖地躺在文档目录下。
所以对于如何修改坚果云的放置目录,放文件目录看起来尽然有续,归档自然?
答案是:在首次启动和登陆坚果云时配置同步目录。
意思就是:你要选择本地的哪个目录,来作为你存放在坚果云云端文件的目录。
所以先提前创建好一个目录:
- 方式1,使用文件管理器,在“文档“下面创建”坚果云“
- 方式2,使用终端,执行:mkdir ”~/Documents/NutStore Files“
上面两个方式均可,目的只是重新配置坚果云默放置的目录。目录到底是中文还是英文,就看个人喜好了。
然后点击登陆坚果云,在以下这个界面修改配置即可。
3.2 彻底解决在home下创建NutStore Files问题
上面的步骤能够修改坚果云默认的放置目录,但是不能够解决每次登陆坚果云以后,它在用户的home目录下创建NutStore Files目录的问题。
以下过程就是通过修改坚果云核心工作脚本,来彻底解决这个问题。
终端执行:vim ~/.nutstore/dist/bin/nutstore-pydaemon.py
,修改内容如下:
第一处修改:
from indicator_menus import is_java_client_running, open_window
from resource_manage import PicturesManage
from log_utils import get_logger
from network_util import execute_cmd, Command
# 以下这几行是要添加的函数,函数的目的就是删除用户home目录下的NutStore Files目录
def remove_home_file():
file = "/home/替换为你的帐号/Nutstore Files"
if os.path.exists(file):
shutil.rmtree(file)
def get_dist_dir():
"""Get the nutstore distribution install directory by the path to the python script"""
path = os.path.dirname(sys.argv[0])
abs_path = os.path.abspath(path)
if os.path.basename(abs_path) != 'bin':
第二处修改:
class JavaAppWatchDog(threading.Thread):
def __init__(self):
remove_home_file() #这里插入上面的函数
# invoke the super class's constructor, if it has
fun = getattr(threading.Thread, "__init__", lambda x: None)
fun(self)
self.daemon = True
# It should only be set when the java app is restarted to migrate to another nutstore home
self.__new_nutstore_home = None
# It should only be set when the java app is restarted by adding more ignore path
self.__ignore_path_list = None
# How many times the java app has been restarted
self.__restart_num = 0
# It should only be set when the java app is restarted by switch account
self.__switch_account = None
# flag to indicate whether the watch dog thread should quit
self.__exit = False
# debug settings
self.__cli_args = ' '.join(sys.argv[1:])
self.__lock = threading.RLock()
def set_new_nutstore_home(self, new_home_dir):
remove_home_file() #这里插入上面的函数
self.__lock.acquire()
try:
self.__new_nutstore_home = new_home_dir
finally:
self.__lock.release()
def get_new_nutstore_home(self):
remove_home_file() #这里插入上面的函数
self.__lock.acquire()
try:
return self.__new_nutstore_home
finally:
第三处修改:
def main_loop():
watchDog = JavaAppWatchDog()
watchDog.start()
listen = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen.bind(('localhost', LOCAL_PORT))
while True:
listen.listen(16)
(conn, addr) = listen.accept()
file = None
try:
# NS-4828 set mode='rw' cause python3 can't write without 'w'
file = conn.makefile(mode='rw')
remove_home_file() # 这里掺入上面的函数
lines = []
while True:
line = file.readline().rstrip('\r\n')
lines.append(line)
if line == 'done' or line == '':
break
第四处修改:
if __name__ == '__main__':
signal.signal(signal.SIGINT, sigint_handler)
if is_java_client_running():
remove_home_file() #这里插入上面的函数
has_file_by_lightapp, path = parse_file_to_open_in_lightapp()
if has_file_by_lightapp:
if path: open_file_in_lightapp(path)
else: open_wizard_in_lightapp()
else:
open_window()
上面修改完成后,保存退出即可。
再也不会应为启动坚果云,home目录下出现NutStore Fiels目录了,它会被自动删除。
4. 剪裁坚果云
4.1 卸载坚果云轻应用
坚果云的安装,会附带安装一些轻应用,使用时,一些默认格式的文件会从轻应用打开。
如果不喜欢使用坚果云轻应用,可以在deepin启动器,找到“坚果云轻应用”快捷方式,右键卸载即可
4.2 目录瘦身
虽然能够卸载轻应用,但是实际上轻应用的可执行文件等,还是存在本地的。
一个快捷的验证就是:
终端执行:du -sh ~/.nutstore/
,会发现该目录很大。而造成这么大的原因,就是~/.nutstore/apps这个目录
如果只是单纯删除这个目录,坚果云会自动修复(即自动下载生成这个目录),保证其功能的可用性。
为了解决这个问题,就需要修改坚果云的核心工作脚本了:~/.nutstore/dist/bin/nutstore-pydaemon.py
解决方案,vim 编辑~/.nutstore/dist/bin/nutstore-pydaemon.py,修改内容如下,保存退出即可。
if __name__ == '__main__':
signal.signal(signal.SIGINT, sigint_handler)
if is_java_client_running():
remove_home_file()
#has_file_by_lightapp, path = parse_file_to_open_in_lightapp()
#if has_file_by_lightapp:
#if path: open_file_in_lightapp(path)
#else: open_wizard_in_lightapp()
#else:
open_window()
....#其他代码
然后就可以痛快地删除~/.nutstore/apps这个目录了。
5. 修复安装坚果云后产生的问题
场景1:安装了坚果云以后,创建的Markdown文件,即以.md为文件格式显示为白色,mime图标丢失
解决方式:
终端执行:rm -rf ~/.local/share/mime
。即删除该目录即可