deepin优雅地使用坚果云攻略
<h1 id="1-前言">1. 前言</h1><p>坚果云是一款多平台同步软件,能够实时备份同步工作和学习中很多重要的脚本,配置等文件。</p>
<p>本篇主要介绍一些在deepin操作系统(最新版本deepin V20.2.3)上使用坚果云的经验,供有同样需求的朋友参考。</p>
<blockquote>
<p>注:博客中涉及到的部分代码的修改在很久之前完成,因为能正常实现个人需求,就没有复核,能用就行。以后有兴致再优化。</p>
</blockquote>
<h1 id="2-deepin安装坚果云">2. deepin安装坚果云</h1>
<p>deepin安装坚果云很简单,只需三步即可完成。</p>
<blockquote>
<p>建议按照以下三个步骤安装,不要从商店安装坚果云</p>
</blockquote>
<p>1.浏览器访问坚果云官方网站下载地址:https://www.jianguoyun.com/s/downloads,下载Linux版本的坚果云deb包</p>
<blockquote>
<p>当前Linux版本的坚果云安装包最新版本5.1.2</p>
</blockquote>
<p>2.deepin打开终端,执行:<code>sudo apt install libnotify-dev</code>安装相关依赖</p>
<p>3.找到下载的坚果云deb包,双击安装,输入密码,即可完成坚果云的安装</p>
<h1 id="3-配置坚果云的同步目录">3. 配置坚果云的同步目录</h1>
<h2 id="31-重新配置默认放置目录">3.1 重新配置默认放置目录</h2>
<p>坚果云默认在当前用户的home目录下创建一个NutStore Files的目录用来放置同步的内容。</p>
<p>但是对于deepin文件管理器来说,在home目录下显示一个NutStore Files有些怪怪的。相比于坚果云,安装的微信就很老实,乖乖地躺在文档目录下。</p>
<p><strong>所以对于如何修改坚果云的放置目录,放文件目录看起来尽然有续,归档自然?</strong></p>
<p>答案是:在首次启动和登陆坚果云时配置同步目录。</p>
<p>意思就是:你要选择本地的哪个目录,来作为你存放在坚果云云端文件的目录。</p>
<p>所以先提前创建好一个目录:</p>
<ul>
<li>方式1,使用文件管理器,在“文档“下面创建”坚果云“</li>
<li>方式2,使用终端,执行:mkdir ”~/Documents/NutStore Files“</li>
</ul>
<p>上面两个方式均可,目的只是重新配置坚果云默放置的目录。目录到底是中文还是英文,就看个人喜好了。</p>
<p>然后点击登陆坚果云,在以下这个界面修改配置即可。</p>
<p><img src="https://img2020.cnblogs.com/blog/597042/202108/597042-20210821125130222-1969873916.png"></p>
<h2 id="32-彻底解决在home下创建nutstore-files问题">3.2 彻底解决在home下创建NutStore Files问题</h2>
<p>上面的步骤能够修改坚果云默认的放置目录,但是不能够解决每次登陆坚果云以后,它在用户的home目录下创建NutStore Files目录的问题。</p>
<p>以下过程就是通过修改坚果云核心工作脚本,来彻底解决这个问题。</p>
<p>终端执行:<code>vim ~/.nutstore/dist/bin/nutstore-pydaemon.py</code>,修改内容如下:</p>
<p>注意:导入包<code>import shutil</code></p>
<p>第一处修改:</p>
<pre><code class="language-python">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)
abs_path = os.path.abspath(path)
if os.path.basename(abs_path) != 'bin':
</code></pre>
<p>第二处修改:</p>
<pre><code class="language-python">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)
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:
</code></pre>
<p>第三处修改:</p>
<pre><code class="language-python">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
</code></pre>
<p>第四处修改:</p>
<pre><code class="language-python">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()
</code></pre>
<p>上面修改完成后,保存退出即可。</p>
<p>再也不会应为启动坚果云,home目录下出现NutStore Fiels目录了,它会被自动删除。</p>
<h1 id="4-剪裁坚果云">4. 剪裁坚果云</h1>
<h2 id="41-卸载坚果云轻应用">4.1 卸载坚果云轻应用</h2>
<p>坚果云的安装,会附带安装一些轻应用,使用时,一些默认格式的文件会从轻应用打开。</p>
<p>如果不喜欢使用坚果云轻应用,可以在deepin启动器,找到“坚果云轻应用”快捷方式,右键卸载即可</p>
<h2 id="42-目录瘦身">4.2 目录瘦身</h2>
<p>虽然能够卸载轻应用,但是实际上轻应用的可执行文件等,还是存在本地的。</p>
<p>一个快捷的验证就是:</p>
<p>终端执行:<code>du -sh ~/.nutstore/</code>,会发现该目录很大。而造成这么大的原因,就是~/.nutstore/apps这个目录</p>
<p>如果只是单纯删除这个目录,坚果云会自动修复(即自动下载生成这个目录),保证其功能的可用性。</p>
<p>为了解决这个问题,就需要修改坚果云的核心工作脚本了:~/.nutstore/dist/bin/nutstore-pydaemon.py</p>
<p>解决方案,vim 编辑~/.nutstore/dist/bin/nutstore-pydaemon.py,修改内容如下,保存退出即可。</p>
<pre><code class="language-python">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() #注意要调整这一行的缩进,保持与remove_home_file()同级缩进
....#其他代码
</code></pre>
<p>然后就可以痛快地删除~/.nutstore/apps/lightapp/1.0.1/下的内容了。<br>
<strong>千万注意:需要保留1.0.1的版本目录,否则会自动创建</strong></p>
<h1 id="5-修复安装坚果云后产生的问题">5. 修复安装坚果云后产生的问题</h1>
<p>场景1:安装了坚果云以后,创建的Markdown文件,即以.md为文件格式显示为白色,mime图标丢失</p>
<p><strong>解决方式:</strong></p>
<p>终端执行:<code>rm -rf ~/.local/share/mime</code>。即删除该目录即可</p>
<h1 id="6-deepin使用webdev挂载坚果云">6. deepin使用webdev挂载坚果云</h1>
<h2 id="61-deepin安装依赖和配置">6.1 deepin安装依赖和配置</h2>
<p>终端执行:<code>sudo apt installl davfs</code></p>
<p>终端执行:<code>sudo vim /etc/davfs2/davfs2.conf</code>,修改参数<code>ignore_dav_header 1</code>,保存退出。</p>
<h2 id="62-坚果云开通授权">6.2 坚果云开通授权</h2>
<p><img src="https://img2020.cnblogs.com/blog/597042/202112/597042-20211215090210506-303614200.png"></p>
<h2 id="63-终端挂载">6.3 终端挂载</h2>
<p>终端执行:<code>sudo mount.davfs -o noexec,user,uid=liwl,gid=liwl https://dav.jianguoyun.com/dav/ ~/Documents/nutstore_webdev/</code>,输入对应的坚果云帐号与刚才截图里面复制的密码</p>
<p>这部分可以使用bash+expect或者python+pexpect做成免交互脚本。</p>
<p>或者在配置文件:<code>/etc/davfs2/secrets</code>里面,保存挂载点,帐号,密码信息</p>
<blockquote>
<p>相关配置可参照:https://www.cnblogs.com/steinven/p/15469893.html</p>
</blockquote>
<p>在deepin里面,使用文件管理器打开webdav挂载的目录,似乎很慢。终端进入应该正常。</p><br><br>
来源:https://www.cnblogs.com/liwanliangblog/p/15179592.html
頁:
[1]