BNU-FZH

fengzhenhua@outlook.com

当设计的脚本需要调用某系统命令时,使用sudo后会提示输入密码,在自己明确自己在干什么时,这很不方便,会极大的降低效率。为解决这一问题,本文给出提升普通用户权限的方法。

sudo 的权限控制

sudo的权限控制位于配置文件/etc/sudoers中,如果想要控制某个用户(或某个组用户)只能执行root权限中的一部分命令, 或者允许某些用户使用sudo时不需要输入密码.

配置文件设置格式

一般格式 root ALL=(ALL) ALL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
授权用户/组 主机  =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...
字段1 字段2 =[(字段3)] [字段4] 字段5

注意:凡是[ ]中的内容, 都能省略; 命令和命令之间用,号分隔;

字段1:
不以%号开头的表示"将要授权的用户" root
以%号开头的表示"将要授权的组" %wheel

字段2:表示允许登录的主机
ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令
eg:jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown
表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令

字段3:
如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。
注意:如果没省略,必须使用( )双括号包含起来

字段4:
可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:。表示执行sudo时可以不需要输入密码
eg:lucy ALL=(ALL) NOPASSWD: /bin/useradd
表示: 普通用户lucy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码
比如:hyc ALL=(ALL:ALL) NOPASSWD:ALL
字段5:授权给用户的操作
逗号分开一系列命令或者ALL表示允许所有操作

高阶用法

1
2
3
4
5
6
7
8
9
10
11
12
如果写成这样:
papi ALL=(root) NOPASSWD: /bin/chown,/usr/sbin/useradd
表示: 用户papi能在所有可能出现的主机上, 提权到root下执行/bin/chown, 不必输入密码; 但运行/usr/sbin/useradd 命令时需要密码.

注意:因为NOPASSWD:只影响了其后的第一个命令: 命令1.
在具有sudo操作的用户下, 执行sudo -l可以查看到该用户被允许和被禁止运行的命令


通配符和取消命令
eg:papi ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk
命令前面加上!号表示取消该命令
表示意思:用户papi在所有可能出现的主机上, 能够运行目录/usr/sbin和/sbin下所有的程序, 但fdisk除外.

系统文档推荐的做法是,修改/etc/sudoers.d 目录下的文件通过此方法修改sudoers ,需要在/etc/sudoers文件的最后行,加上

1
@includedir /etc/sudoers.d

注意: 这里的指令@includedir是一个整体, 具体参考 sudoers.5

任何在/etc/sudoers.d/目录下,不以~号结尾的文件和不包含.号的文件,都会被解析成/etc/sudoers的内容。 比如我新创建的用户 hyc 想要实现root权限,可在/etc/sudoers.d/下新建一个文件01_hyc 文件,输入以下语句hyc ALL=(ALL:ALL) NOPASSWD:ALL 。 此时新建的用户就能获取root权限。

参考文章

Linux 是开源系统,所以无法指望它能像 Windows 或 Mac 系统一样面面俱到。在使用过程中,自定义一些配置也是经常遇到的。本文记录: 如何修复 Gnome 菜单中有的启动器对应的图标无法正常显示的问题。

系统中存在相关图标的情况

图标的默认安装位置为/usr/share/icons/, 例如 ArchLinux (2024-11-28)系统中,Open JDK java的图标就无法正常显示,查询启动器文件

/usr/share/applications/java-java-openjdk.desktop
1
2
3
4
5
6
7
8
9
10
11
12
[Desktop Entry]
Name=OpenJDK Java 23 Runtime
Name[fi]=OpenJDK Java 23 - ajonaikainen ympäristö
Comment=OpenJDK Java 23 Runtime
Comment[fi]=OpenJDK Java 23 - ajonaikainen ympäristö
Keywords=java;runtime
Exec=/usr/lib/jvm/java-23-openjdk/bin/java -jar
Terminal=false
Type=Application
Icon=java23-openjdk
MimeType=application/x-java-archive;application/java-archive;application/x-jar;
NoDisplay=true

既然其图标无法正常显示,则表明系统中并没有安装java23-openjdk图标。于是查询系统中安装的相关图标:

1
2
3
4
5
ls -R /usr/share/icons/ |grep java
>
java-openjdk
java-openjdk
java-openjdk

这表明系统中安装的图标为java-openjdk, 因此修改java-java-openjdk.desktop文件中的Icon

1
Icon=java-openjdk

如何指定图标路径

默认情况下,应用程序应该按照以下顺序查找:$HOME/.icons(为了向后兼容性),$XDG_DATA_DIRS/icons/usr/share/pixmaps。应用程序可以进一步将自己的图标目录添加到此列表中,用户可以以应用程序/桌面特定的方式扩展或更改列表。在这些目录中,每个主题都存储为子目录。通过具有相同名称的子目录,可以将主题分布在多个基本目录中。这样,用户可以扩展和覆盖系统主题。 为了给第三方应用程序提供安装其图标的位置,始终应存在一个名为hicolor的主题。hicolor主题的数据可在以下网址下载:http://www.freedesktop.org/software/icon-theme。实现必须在当前主题中找不到图标时查找hicolor主题。 每个主题都存储为基本目录的子目录。主题的内部名称是子目录的名称,尽管由主题指定的用户可见名称可能不同。因此,主题名称区分大小写,并且仅限于ASCII字符。主题名称也不能包含逗号或空格。 在至少一个主题目录中,必须存在一个名为index.theme的文件,描述主题的属性。按顺序搜索基本目录时,使用找到的第一个index.theme文件。该文件描述了主题的一般属性。 在主题目录中还有一组包含图像文件的子目录。每个目录包含为特定名义图标大小设计的图标,如index.theme文件所述。子目录允许多级深入,例如主题hicolor中的子目录48x48/apps将位于$basedir/hicolor/48x48/apps。 图像文件必须是以下类型之一:PNGXPMSVG,并且扩展名必须为.png.xpm.svg(小写)。对于SVG文件的支持是可选的。不支持SVG的实现应该忽略任何.svg文件。除此之外,对于每个文件可能还有一个包含额外图标数据的附加文件。它的基本名称应与图像文件相同,扩展名为.icon。例如,如果图标文件名为mime_source_c.png,则相应的文件名将为mime_source_c.icon。 完整的规格比这个要详尽得多,但关键是:有一些设定的目录,你只需将图标放入其中,桌面就能找到它们。哪种最适合你取决于你的问题和耐心.

注意:有的文章中说“如果你把图标放在/usr/share/icons/(系统范围)或者你的个人目录~/.icons中,那么在.desktop文件中只需要使用图标文件名而不需要扩展名”。而我的系统中有一个应用Singular, 系统默认将其图标放置在了/usr/share/icons/Singular.png, 但是在文件/usr/share/applications/Singular.desktop中直接写为Icon=Singular,而系统并没有识别出来,于是修改为绝对路径Icon=/usr/share/icons/Singular.png后成功识别。修改完图标后,运行 gtk-update-icon-cache -f -t <图标主题路径>,系统会立刻检测到该图标。

参考文章

1.最初投稿Coverletter

DearEditors:
We would like to submit the enclosed manuscript entitled“Paper Title”, which we wish to be considered forpublication in “Journal Name”. No conflict of interestexits in the submission of this manuscript, and manuscript isapproved by all authors for publication. I would like to declare onbehalf of my co-authors that the work described was original researchthat has not been published previously, and not under considerationfor publication elsewhere, in whole or in part. All the authorslisted have approved the manuscript that is enclosed.

In thiswork, we evaluated …… (简要介绍一下论文的创新性).I hope this paper is suitable for “Journal Name”.

Thefollowing is a list of possible reviewers for your consideration:

1)Name A E-mail: ××××@××××

2)Name B E-mail: ××××@××××

Wedeeply appreciate your consideration of our manuscript, and we lookforward to receiving comments from the reviewers. If you have anyqueries, please don’t hesitate to contact me at the addressbelow.

Thank you and best regards.

Yourssincerely,
××××××
Correspondingauthor: 
Name: ×××
E-mail: ××××@××××

2.催稿信

DearProf. ×××:

Sorry for disturbing you. I am notsure if it is the right time to contact you to inquire about thestatus of my submitted manuscript titled “Paper Title”.(ID: 文章稿号),although the status of “With Editor” has been lasting formore than two months, since submitted to journal three months ago. Iam just wondering that my manuscript has been sent to reviewers ornot?

I would be greatly appreciated if you could spend some ofyour time check the status for us. I am very pleased to hear from youon the reviewer’s comments.

Thank you very much for yourconsideration.

Best regards! 
Yourssincerely,
××××××
Correspondingauthor: 
Name: ×××
E-mail: ××××@××××

3.修改稿Coverletter

DearDr/ Prof..(写上负责你文章编辑的姓名,显得尊重,因为第一次的投稿不知道具体负责的编辑,只能用通用的Editors):

Onbehalf of my co-authors, we thank you very much for giving us anopportunity to revise our manuscript, we appreciate editor andreviewers very much for their positive and constructive comments andsuggestions on our manuscript entitled “Paper Title”.(ID: 文章稿号).

Wehave studied reviewer’s comments carefully and have maderevision which marked in red in the paper. We have tried our best torevise our manuscript according to the comments. Attached please findthe revised version, which we would like to submit for your kindconsideration.

We would like to express our great appreciation toyou and reviewers for comments on our paper. Looking forward tohearing from you.
Thank you and best regards.

Yourssincerely,
××××××
Correspondingauthor:
Name: ×××
E-mail: ××××@××××

4.修改稿回答审稿人意见(最重要的部分)

Listof Responses
Dear Editors and Reviewers:
Thank you for yourletter and for the reviewers’ comments concerning ourmanuscript entitled “Paper Title” (ID: 文章稿号).Those comments are all valuable and very helpful for revising andimproving our paper, as well as the important guiding significance toour researches. We have studied comments carefully and have madecorrection which we hope meet with approval. Revised portion aremarked in red in the paper. The main corrections in the paper and theresponds to the reviewer’s comments are as flowing:

Respondsto the reviewer’s comments:

Reviewer #1: 
1. Response tocomment: (……简要列出意见……)
Response:××××××
2. Response to comment:(……简要列出意见……)
Response:××××××
。。。。。。逐条意见回答,切忌一定不能有遗漏

针对不同的问题有下列几个礼貌术语可适当用用:
Weare very sorry for our negligence of ……...
We arevery sorry for our incorrect writing ……...
It isreally true as Reviewer suggested that……
We havemade correction according to the Reviewer’s comments.
Wehave re-written this part according to the Reviewer’ssuggestion
As Reviewer suggested that……
Consideringthe Reviewer’s suggestion, we have ……

最后特意感谢一下这个审稿人的意见:
Specialthanks to you for your good comments. 

Reviewer #2:

同上述

Reviewer#3:
××××××
Other changes:
1. Line 60-61, the statements of “……”were corrected as “…………”
2.Line 107, “……” was added 
3. Line 129,“……” was deleted
××××××

Wetried our best to improve the manuscript and made some changes in themanuscript. These changes will not influence the content andframework of the paper. And here we did not list the changes butmarked in red in revised paper.

We appreciate forEditors/Reviewers’ warm work earnestly, and hope that thecorrection will meet with approval.

Once again, thank you verymuch for your comments and suggestions.

5.文章接收后感谢信(根据需要感谢负责文章的编辑或主编)

DearProf. ××××××:

Thanks very muchfor your kind work and consideration on publication of our paper. Onbehalf of my co-authors, we would like to express our greatappreciation to editor and reviewers.

Thank you and bestregards.

Yours sincerely,
××××××
Correspondingauthor:
Name: ×××
E-mail: ××××@××××

6.询问校稿信件

Dear×××:

Sorry for disturbing you. I am not sure ifit is the right time to contact you to inquire about the status ofour accepted manuscript titled “Paper Title” (ID: 文章稿号),since the copyright agreement for publication has been sent to youtwo months ago. I am just wondering that how long I can receive theproof of our manuscript from you?
I would be greatly appreciatedif you could spend some of your time for a reply. I am very pleasedto hear from you.

Thank you very much for yourconsideration.

Yours sincerely,
××××××
Correspondingauthor:
Name: ×××
E-mail: ××××@××××

7.文章校稿信件

DearMr. ×××:

Thanks very much for your kind letterabout the proof of our paper titled “Paper Title” (ID:文章稿号)for publication in “Journal Name”. We have finished theproof reading and checking carefully, and some corrections about theproof and the answers to the queries are provided below.

Corrections:
1. In ****** should be **** (Page ***, Rightcolumn, line***)
2. In **** the “*****” should be“****” (Page ****, Right column, line****)

Answers for“author queries”:
1. *********************.
2.**********************
3. **********************

We greatlyappreciate the efficient, professional and rapid processing of ourpaper by your team. If there is anything else we should do, please donot hesitate to let us know.

Thank you and best regards.
Yourssincerely,
××××××
Correspondingauthor:
Name: ×××
E-mail: ××××@××××

引用

全文引用自:SCI投稿7个阶段的邮件模板

在使用 Linux 办公的过程中不可避免的要手动安装一些自定义的软件,或者在仓库中无法找到的软件。此时在菜单中安装一个程序启动器就显得尤为必要,在此之前制作.desktop文件, 请参考文章:Linux桌面创建启动器

安装程序图标

如果你已经获得了对应程序的icons, 那么相当于获得了一个含有图标的目录:

ls ./icons/hicolor
1
2
3
4
5
6
7
8
9
10
11
16x16     48x48       192x192@2
16x16@2 48x48@2 256x256
20x20 64x64 256x256@2
22x22 64x64@2 384x384
22x22@2 72x72 512x512
24x24 72x72@2 512x512@2
24x24@2 96x96 icon-theme.cache
32x32 96x96@2 index.theme
32x32@2 128x128 scalable
36x36 128x128@2 symbolic
36x36@2 192x192

此时需要递归的把各目录中的图标复制到系统的相应图标目录中,只需要cp命令添加-r选项, 即

1
2
3
sudo cp -r ./icons  /usr/share/icons/
sudo gtk-update-icon-cache /usr/share/icons/hicolor
sudo update-mime-datebase -V /usr/share/mime

其中hicolor是当前的主题,不同的机器使用不同的主题。

安装 .desktop 文件

命令安装

1
xdg-desktop-menu install path/to/file.desktop

手动安装

1
2
sudo cp path/to/file.desktop /usr/share/applications/file.desktop
sudo xdg-desktop-menu forceupdate

例子: 安装 Zlibrary

  • 下载Zlibrary For any linux
  • 解压后安装到/opt/Z-Library
    1
    2
    unar zlibrary-setup-latest.gz 
    sudo cp -r zlibrary-setup-latest /opt/Z-Library
  • 下载Zlibrary For debian/ubuntu, 以获取icons.desktop
    1
    2
    3
    4
    5
    6
    7
    8
    unar zlibrary-setup-latest.deb
    cd zlibrary-setup-latest
    unar data.tar.xz
    cd data/usr/share/icons
    sudo cp ./usr/share/icons/hicolor /usr/share/icons/hicolor
    sudo cp ./usr/share/applications/z-library.desktop /usr/share/applications/z-library.desktop
    sudo gtk-update-icon-cache /usr/share/icons/hicolor
    sudo xdg-desktop-menu forceupdate

参考文章

现在我们来关注黎曼曲率。总的来说,黎曼曲率提供了一种方案,让身处空间内部的人也能计算自身所处空间的弯曲程度。俗话说,“不识庐山真面目,只缘身在此山中”,还有“当局者迷,旁观者清”,等等,因此,能够身处空间之中而发现空间中的弯曲与否,是一件很了不起的事情,就好像我们已经超越了我们现有的空间,到了更高维的空间去“居高临下”那样。真可谓“心有多远,路就有多远,世界就有多远”。

如果站在更高维空间的角度看,就容易发现空间的弯曲。比如弯曲空间中有一条测地线,从更高维的空间看,它就是一条曲线,可以计算曲率等,但是在原来的空间看,它就是直的,测地线就是直线概念的一般化,因此不可能通过这种途径发现空间的弯曲性,必须有一些迂回的途径。可能一下子不容易想到,但是各种途径都殊途同归后,就感觉它是显然的了。

怎么更好地导出黎曼曲率来,使得它能够明显地反映出弯曲空间跟平直空间的本质区别呢?为此笔者思考了很长时间,看了不少参考书(《引力与时空》、《场论》、《引力论》等),比较了几种导出黎曼曲率的方式,简要叙述如下.

求导顺序不能乱

一般的张量分析或者黎曼几何教材中,导出黎曼曲率的方式是考虑二阶协变导数顺序的差别: \[\begin{equation}\label{eq:reimann0} A^\mu_{;\alpha;\beta}-A^\mu_{;\beta;\alpha}=-R^\mu_{\nu\alpha\beta}A^\nu \end{equation}\]

由此可以分离出黎曼曲率张量\(R^\mu_{\nu\alpha\beta}\)来,这确实是一种爽快的途径,但它的几何意义并不明显,很难看出它是怎么反映空间是曲还是直的。而且我们现在还没有定义二阶协变导数(一次协变导数后有两个指标,即相当于一个矩阵而不是向量了,定义高阶协变导数需要细节上的跟进),而这个定义基本上是纯粹代数演算,目前对我们来说意义不大,因此我们这里不作定义,读者直接参考教材即可,所以我们也不对这种方案多作讨论。

在弯曲空间邂逅

此外,还有通过测地线偏离(在广义相对论中对应于潮汐力)来导出黎曼曲率的,那也算是一种几何意义和物理意义都很明确的方案,但是涉及到的计算比较繁琐。主要思路是:考虑测地线方程 \[\begin{equation}\label{eq:cedixian0} \frac{d^2x^\mu}{ds^2}+\Gamma^\mu_{\alpha\beta}(x)\frac{dx^\alpha}{ds}\frac{dx^\beta}{ds}=0 \end{equation}\] 假设有另一条测地线\(x(s)+\delta{x}(s)\), 那么定满足方程 \[\begin{equation}\label{eq:cedixian1} \frac{d^2(x^\mu+\delta{x^\mu})}{ds^2}+\Gamma^\mu_{\alpha\beta}(x+\delta{x})\frac{d(x^\alpha+\delta{x^\alpha})}{ds}\frac{d(x^\beta+\delta{x^\beta})}{ds}=0 \end{equation}\] 假设\(\delta{x}\)\(d\delta{x}/ds\)都是无穷小量,两式作差,得到 \[\begin{equation}\label{eq:cedixian2} \frac{d^2\delta{x^\mu}}{ds^2}+\frac{\partial\Gamma^\mu_{\alpha\beta}}{\partial{x^\nu}}\delta{x^\nu}\frac{dx^\alpha}{ds}\frac{x^\beta}{ds}+2\Gamma^\mu_{\alpha\beta}\frac{d\delta{x^\alpha}}{ds}\frac{dx^\beta}{ds}=0 \end{equation}\] 其中\(\delta{x}\)就被称为测地线偏离,在黎曼几何中,称之为“雅可比向量场”。上述形式已经足够简单,然而,我们倾向于写成协变导数的形式,因为协变导数才是在弯曲空间中合理的导数,前面我们已经定义了沿测地线的导数\(\frac{DA^\mu}{Ds}\), 重复一次,我们就能够得到沿测地线的二阶导数\(\frac{D^2A^\mu}{Ds^2}=\frac{D}{Ds}\left(\frac{DA^\mu}{Ds}\right)\), 这是容易办到的,但因为我们这里不是特别关心这种方案,因此就不写出\(\frac{D^2A^\mu}{Ds^2}\)的具体形式了,读者可以自己推导。经过计算后,就会发现 \[\begin{equation}\label{eq:cedixian3} \frac{D^2\delta{x^\mu}}{Ds^2}=-R^\mu_{\nu\alpha\beta}\delta{x^\alpha}\frac{dx^\nu}{ds}\frac{dx^\beta}{ds} \end{equation}\] 这就出现了曲率张量\(R^\mu_{\nu\alpha\beta}\)。从数学来看,非零的\(R^\mu_{\nu\alpha\beta}\)实际上表明了测地线分布的不均匀,这就是弯曲空间的体现之一。

这种方案让笔者想起了几米的漫画作品《向左走·向右走》,说的是男女主角一个习惯向左走,一个习惯向右走,于是他们两个看起来永远不会相遇。但有一天他们在圆形喷水池相遇了——在圆的一端背向行走,最终在圆的另一端相遇了。而在弯曲空间中,比如在球面上,即便两条平行线也有相交的机会。这其实表明,“弯曲”其实更为深刻和有趣,它给予了我们世界更多的可能性。

"溜达"回来的变化

最后还有一种分析向量沿着闭合曲线平移后的变化的方案,我们在这里详细分析它。事实上它跟测地线偏离是等价的,只是它的几何意义更加明显,有助于导出更为深刻的结果。它表明,如果一个向量“溜达”一圈回来之后,它就不一定是原来的向量了。下图的例子就清晰表明了这一点。 溜达回来的变化

假设\(x^\mu\)处有任意一个向量\(A_\mu\),从\(x^\mu\)出发,先平移无穷小量\(dx^\mu\),再平移无穷小量\(\delta{x^\mu}\),然后再平移无穷小量\(−dx^\mu\),最后平移无穷小量\(-\delta{x^\mu}\),也就是沿着一个无穷小的平行四边形走了一圈,回到原点: \[\begin{equation}\label{eq:cedixian4} x^\mu\to x^\mu+dx^\mu \to x^\mu+dx^\mu+\delta{x^\mu} \to x^\mu+\delta{x^\mu} \to x^\mu \end{equation}\]

我们逐步计算平移过程中\(A^\mu\)的变化,从\(x^\mu\)\(x^\mu+dx^\mu\)\(A_\mu\)变为 \[\begin{equation}\label{eq:cedixian5} A^\mu-\Gamma^\mu_{\alpha\beta}(x)A^\alpha dx^\beta \end{equation}\] 接着从\(x^\mu+dx^\mu\)\(x^\mu+dx^\mu+\delta{x^\mu}\), \(A^\mu\)变为 \[\begin{align}\label{eq:cedixian6} A^\mu&-\Gamma^\mu_{\alpha\beta}(x)A^\alpha dx^\beta-\Gamma^\mu_{\nu\gamma}(x+dx)\left[A^\nu-\Gamma^\nu_{\alpha\beta}(x)A^\alpha dx^\beta\right]\delta{x^\gamma} \notag \\ &=A^\mu-\Gamma^\mu_{\alpha\beta}(x)A^\alpha dx^\beta-\Gamma^\mu_{\nu\gamma}(x)A^\nu\delta{x^\gamma}-\frac{\partial\Gamma^\mu_{\nu\gamma}(x)}{\partial x^\beta}A^\nu d{x^\beta}\delta{x^\gamma} \notag \\ &\quad +\Gamma^\mu_{\nu\gamma}(x)\Gamma^\nu_{\alpha\beta}(x)A^\alpha dx^\beta \delta{x^\gamma} \end{align}\] 这里我们只精确到二阶项。类似地,如果考虑路径\(x^\mu\to x^\mu+\delta{x^\mu}\to x^\mu+dx^\mu+\delta{x^\mu}\)所带来的变化,则只需要将\(dx\)\(\delta{x}\)交换 \[\begin{equation}\label{eq:cedixian7} A^\mu-\Gamma^\mu_{\alpha\beta}(x)A^\alpha \delta{x^\beta}-\Gamma^\mu_{\nu\gamma}(x)A^\nu d{x^\gamma} -\frac{\partial\Gamma^\mu_{\nu\gamma}(x)}{\partial x^\beta}A^\nu \delta{x^\beta}d{x^\gamma}+\Gamma^\mu_{\nu\gamma}(x)\Gamma^\nu_{\alpha\beta}(x)A^\alpha \delta{x^\beta} d{x^\gamma} \end{equation}\] 那么很自然地,路径\(x^\mu+dx^\mu +\delta{x^\mu}\to x^\mu+\delta{x^\mu} \to x^\mu\)所造成的变化就是上式的相反数。于是,整条闭合路径\(x^\mu \to x^\mu+dx^\mu \to x^\mu+dx^\mu+\delta{x^\mu} \to x^\mu+\delta{x^\mu}\to x^\mu\)所带来的变化就是两式这差。调整一下求和指标,然后作差,不难得到 \[\begin{align}\label{eq:cedixian8} \Delta{A^\mu}&=-\left(\frac{\partial\Gamma^\mu_{\alpha\gamma}}{\partial x^\beta}-\frac{\partial \Gamma^\mu_{\alpha\beta}}{\partial x^\gamma}+\Gamma^\mu_{\nu\beta}\Gamma^\nu_{\alpha\gamma}-\Gamma^\mu_{\nu\gamma}\Gamma^\nu_{\alpha\beta}\right)A^\alpha dx^\beta\delta{x^\gamma} \notag \\ &=-R^\mu_{\alpha\beta\gamma}A^\alpha dx^\beta\delta{x^\gamma} \end{align}\] 这里 \[\begin{equation}\label{eq:cedixian9} R^\mu_{\alpha\beta\gamma}=\frac{\partial\Gamma^\mu_{\alpha\gamma}}{\partial x^\beta}-\frac{\partial \Gamma^\mu_{\alpha\beta}}{\partial x^\gamma}+\Gamma^\mu_{\nu\beta}\Gamma^\nu_{\alpha\gamma}-\Gamma^\mu_{\nu\gamma}\Gamma^\nu_{\alpha\beta} \end{equation}\] 就是黎曼曲率张量的定义式了,它有4个指标,是一个非常“宏伟”的量。

一句话来说

三种不同的黎曼曲率张量的导出方式,分别从三个角度表明了弯曲空间与平直空间的区别:平直空间中,协变导数的次序是可以交换的,弯曲空间则不是;平直空间中,测地线分布的均匀的、线性的,弯曲空间则不是;平直空间中,一个向量去“溜达”一圈回来之后,并没有变化,而弯曲空间中,向量去“溜达”完之后,可能就不是原来的向量了。

https://spaces.ac.cn/archives/4014

由于最近入手了一款Logitech的无线机械键盘k865, 在Archlinux下使用非常好,所幸使用pacmanparu查询了一下关于Logitech在Archlinux下相关的软件,然后就发现了这款Archlinux官方仓库中的软件solaar.

简介

Solaar 是一款专为 Linux 系统设计的 Logitech 设备管理工具,支持多种 Logitech 键盘、鼠标及其他无线设备。无论是通过 Unifying、Bolt、Lightspeed 或 Nano 接收器连接的设备,还是通过 USB 线缆或蓝牙连接的设备,Solaar 都能轻松管理。Solaar 并非设备驱动程序,而是通过响应 Linux 输入系统忽略的特殊消息来实现其功能。

使用场景

  1. 多设备管理:对于拥有多款 Logitech 设备的用户,Solaar 提供了一个集中管理平台,方便用户统一管理所有设备。
  2. 设备配置:用户可以通过 Solaar 轻松配置设备的各项设置,如按键映射、灵敏度调整等。
  3. 自动化规则:Solaar 支持根据设备消息自动运行预设规则,适用于需要自动化操作的场景。
  4. 设备维护:Solaar 可以帮助用户快速诊断和解决设备连接问题,提升设备使用体验。

项目特点

  • 多设备支持:Solaar 支持多种 Logitech 设备,无论是无线还是有线设备,都能轻松管理。
  • 灵活配置:用户可以根据个人需求自定义设备设置,满足不同使用场景的需求。
  • 自动化规则:通过设置自动化规则,Solaar 能够根据设备状态自动执行特定操作,提升工作效率。
  • 跨平台兼容:Solaar 完全兼容 Linux 系统,适用于各种 Linux 发行版。
  • 开源免费:Solaar 是一款开源软件,用户可以免费使用并参与项目开发。

Archlinux 下安装和使用

1
2
sudo pacman -S solaar
sudo solaar

虽然solaar建立了启动器图标,但是默认并没有root权限,在使用的时候请在命令行中使用sudo solaar命令打开软件,这样才能看到电脑连接的 Logitech 设备,并设置。

参考文章

简介

在 Linux 中,一个 .desktop 文件就是一个用来运行程序的快捷方式。没有 .desktop 的话,你的应用就不会在应用菜单中显示了,也无法使用像 Synapse 和 Albert 这样的第三方启动起启动了。

大多数应用在安装后都会自动创建 .desktop 文件,并将自己放入应用菜单中以方便访问。然而,如果是你自己从源代码中编译的程序或者自己下载的压缩格式的应用,那就不会做这些事情了,每次你都需要打开终端来执行它的二进制文件。显然这个过程很无聊也很麻烦。

本文将会告诉你如何为应用创建 .desktop 文件,从而让你能在应用菜单中启动该应用。

创建启动器

.desktop 文件基本上就是一个包含程序信息的纯文本文件,通常根据是自己可见还是所有用户可见的不同而放在 ~/.local/share/applications 或者 /usr/share/applications/ 目录中。你在文件管理器中访问这两个目录,都会看到很多系统中已安装应用对应的 .desktop 文件存在。

为了演示,我将会为 Super Tux Kart 创建一个 .desktop 文件,这是一个我很喜欢玩的卡丁车竞赛游戏。Ubuntu 仓库中带了这个游戏,但版本一般不新。

要获得最新的版本就需要下载 tar 包,解压并执行其中的游戏启动文件。

你可以仿照这个步骤来为任何程序创建启动器。

注意:下面步骤假设程序压缩包放在 “Downloads” 目录下。

  1. 跳转到存放压缩包的目录,右击然后选择 “Extract here”。
application-launcher-5
  1. 解压后,进入新创建的目录然后找到可执行的文件。之后右击文件选择 “Run” 来启动程序,确定程序运行正常。
application-launcher-6
  1. 有时候,你在右键菜单中找不到 “Run” 选项。这通常是因为这个可执行文件是一个文本文件。你可以在终端中执行它,如果你使用 GNOME 的话,可以点击上面菜单栏中的 Files 菜单,然后选择 “Preferences”。
application-launcher-linux-1
  1. 选择 “Behavior” 标签页然后选择 “Executable Text Files” 下的 “Run them”。现在右击可执行文本文件后也能出现 “Run” 选项了。
application-launcher-31
  1. 确认应用运行正常后,就可以退出它了。然后运行你的文本编辑器并将下面内容粘贴到空文本文件中:
    1
    2
    3
    4
    5
    6
    7
    8
    [Desktop Entry]
    Encoding=UTF-8
    Version=1.0
    Type=Application
    Terminal=false
    Exec=/path/to/executable
    Name=Name of Application
    Icon=/path/to/icon

你需要更改 “Exec” 域的值为可执行文件的路径,并且将 “Name” 域的值改成应用的名称。大多数的程序都在压缩包中提供了一个图标,不要忘记把它也填上哦。在我们这个例子中,Super Tux Kart 的启动文件看起来是这样的:

application-launcher-supertuxkart
  1. 将文件以 application-name.desktop 为名保存到 ~/.local/share/applications 目录中。.local 目录位于你的家目录下,是一个隐藏目录,你需要启用 “Show Hidden Files” 模式才能看到它。如果你希望这个应用所有人都能访问,则在终端中运行下面命令:
    1
    sudo mv ~/.local/share/applications/<application-name`.desktop`> /usr/share/applications/

当然,别忘了把命令中的 <application-name.desktop> 改成真实的 .desktop 文件名。

  1. 完成后,打开应用菜单,就能看到应用出现在其中,可以使用了。
application-launcher-2

这个方法应该适用于所有主流的 Linux 操作系统。下面是另一张 Super Tux Kart 在 elementary OS 的应用启动器 (slingshot) 上的截图

application-launcher-4

简介

Stirling-PDF 是一个基于 spring-boot 开发的开源项目,旨在提供一个功能强大本地托管的 PDF 操作工具。它使您能够对 PDF 文件进行多种操作,包括拆分、合并、转换、重新组织、添加图片、旋转、压缩等。该本地托管应用最初由 ChatGPT 完全开发,并已发展成一个功能齐全的工具,可满足您的各种 PDF 需求。

日常生活中经常需要处理 PDF 文件, 当前也有好多处理 PDF 的在线工具,但要么需要会员,要么需要登录等繁琐操作,而且我们的文件也存在泄漏等安全隐患。由于 Stirling-PDF 是一个可以托管到本地的操作工具,对于不习惯使用 pdftk 命令的朋友,安装此软件将是一个相当正确的选择。

Linux 下的安装使用

使用 paru 安装

在 ArchLinux 下安装 Stirling-PDF 是一件相当容易的事情,因为 Stirling-PDF 可以在 Aur 仓库找到,只需要一条命令即可:

1
paru -S stirling-pdf-bin

注意:Stirling-PDF 依赖于最新版的 libreoffice-fresh, 所以安装前把 libreoffice-still 替换为 libreoffice-fresh.

手动启动

起动、停止和重启服务

1
2
3
4
sudo systemctl status stirlingpdf.service
sudo systemctl start stirlingpdf.service
sudo systemctl stop stirlingpdf.service
sudo systemctl restart stirlingpdf.service

使用

  • 启动服务sudo systemctl start stirlingpdf.service
  • 游览器打开:http://localhost:8080
  • 关闭服务sudo systemctl stop stirlingpdf.service
  • 因为处理PDF文件对于个人来讲不是高频率操作,所以手动操作即可。如查想设置为默认启动,请执行
    1
    sudo systemctl enable stirlingpdf.service

安装到启动器

注意:按照官方的安装方法LocalRunGuide配置好启动器,经过测试是无法运行的。原因是, 如果使用 &&|| 等一次写入多条命令,则第二个可执行文件被读取为一个参数。所以,最佳方式是单独建立一个运行脚本,然后在 Stirling-PDF.desktop文件中直接调用。

查看软件安装位置

1
sudo pacman -Ql stirling-pdf-bin

获取图标文件

由于使用paru安装的stirling-pdf-bin,其并不包括创建.desktop文件,所以也就没有icons图标。因此,需要从github上获取icons图标.

1
2
git clone https://github.com/Stirling-Tools/Stirling-PDF.git
sudo cp -r ./Stirling-PDF/docs /usr/share/icons/stirling

编写程序脚本

/usr/local/bin/stirling
1
2
3
#! /bin/sh
nohup java -jar /usr/share/java/stirling-pdf.jar &> /dev/null
xdg-open http://localhost:8080

编写启动器文件

~/.local/share/applications/Stirling-PDF.desktop
1
2
3
4
5
6
7
8
9
10
11
[Desktop Entry]
Type=Application
Name=Stirling PDF
GenericName=Launch StirlingPDF and open its WebGUI
Categories=Office
Exec=stirling
Icon=/usr/share/icons/stirling/stirling-transparent.svg
Keywords=pdf
Type=Application
NoDisplay=false
Terminal=fals

参考网站

此处给出几个测试网站,可以使用,但是

Windows 下安装使用

下载Windows版

本节研究使用Odeint解微分方程,并保存为csv数据的方法。本节以官网odeint上的一个例子,写出添加保存数据后的代码。所求解的微分方程为

\[\begin{equation}\label{eq:odeint} \theta''(t)+b\theta'(t)+c\sin(\theta) = 0 \end{equation}\]

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /usr/bin/env python3
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from sympy.abc import t
import pandas as pd

b = 0.25
c = 5.0
y0 = [np.pi-0.1, 0.0]

def spend(y, t, b, c):
theta, omega = y
dydt = [ omega, -b*omega-c*np.sin(theta)]
return dydt

t = np.linspace(0, 15, 1001)
sol = odeint(spend, y0, t, args=(b,c))

# 保存数据
#
u = pd.DataFrame(sol)
u.to_csv('func.csv')

# 及时绘图
plt.plot(t, sol[:, 0], 'b', label='theta(t)')
plt.plot(t, sol[:, 1], 'g', label='omega(t)')
plt.legend(loc='best')
plt.grid()
plt.show()

注意:使用odeint求解完微分方程后,返回结果sol, 其为 \(1001\times 2\) 的数组,可以直接使用DataFrame生成表格数据并保存为func.csv文件,之后再使用veusz绘图。

参考文章

简介

在科研工作中需要求解一些方程,这些方程除了数值解法外没有更好的求解方式,所以通过 Python 或其他程序将函数的映射关系保存为一个 csv 文件,然后随时都可以用绘图软件作图显示。如果不保存数据,每次分析或交流时都要重新跑一遍程序,显然在时间上是不合算的,所以必须将复杂方程的结果保存下来。本文介绍使用 Python 保存函数图象为 csv文件的操作流程。

实例

python3 源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#! /usr/bin/env python3
from os import walk
import numpy as np
import matplotlib.pyplot as plot
from pylab import *
import pandas as pd
import math
import tkinter as tk

x0=-0.2 #初始值z0的x0
y0=0 #初始值z0的y0
a=4 #绘制图的横轴大小
step=0.01 #绘制点的步长
zoom=1.0 #放大倍率

x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step)
y=x**2+2*x+1
z=3*np.sin(x)

data = {
`xd': x ,
'yd': y ,
'zd': z
}
u = pd.DataFrame(data)
u.to_csv('func.csv')

编程思路

  • x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step) 建立自变量等间隔划分的一个列向量.
  • y=x**2+2*x+1 根据自变量建立了一个二元函数映射列向量.
  • z=3*np.sin(x) 根据自变量建立了一个三解函数映射列向量.
  • 使用三组列向量构建数据表格 data.
  • 使用pandasDataFrame函数建立data对应的数据,并保存为func.csv文件.
  • 使用veusz导入func.csv,选择对应的列数据便可以绘制相应的函数图象.

参考文章