Post

Optimize

ubuntu优化

谷歌浏览器汉化

在ubuntu内更改Chrome的语言时,并没有像是windows的以这种语言显示Google Chrome 的选项。最多也只能修改提示翻译的优先语言。没有严格意义上的更改显示语言的选项。
在linux系统上,Chrome的显示语言是根据系统语言变化,一种办法是将系统语言设置成想要显示的语言,但是更多的场景可能是系统语言是英文,应用语言是中文。这里需要通过添加命令行参数来修改 Chrome 的语言。

打开终端,在终端中输入

1
LANGUAGE=zh_cn google-chrome

此时启动Chrome则是以中文显示。若要修改Chrome的默认语言,需要额外添加脚本。

在Chrome的图标文件/usr/share/applications/google-chrome.desktop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ Desktop Entry ]
  Version=1.0
  Name=Google Chrome
  # Only KDE 4 seems to use GenericName, so we reuse the KDE strings.
  # From Ubuntu's language-pack-kde-XX-base packages, version 9.04-20090413.
  GenericName=Web Browser
  ......
  Exec=/usr/bin/google-chrome-stable %U
  StartupNotify=true
  Terminal=false
  Icon=google-chrome
  Type=Application
  Categories=Network;WebBrowser;
  ......

Chrome通过Exec=/usr/bin/google-chrome-stable运行,但直接添加命令行参数LANGUAGE=zh_cn 的话不仅会无法使用,而且还会导致GNOME桌面找不到Chrome。解决方法如下

新建一个chrome_cn.sh脚本,在脚本中添加如下内容

1
2
#!/bin/bash
LANGUAGE=zh_cn /usr/bin/google-chrome-stable $@

随后将该脚本复制到/usr/bin/路径下,最后将/usr/share/applications/google-chrome.desktop 里的所有/usr/bin/google-chrome-stable换成/usr/bin/chrome_cn.sh,此时启动Chrome界面将是中文。

一键配置脚本

zsh

众所周知,大部分的Linux发行版的默认命令解释器是bash,Mac默认的是zsh。相比于默认的bash,zsh有更多的自定义选项,并支持扩展。因此zsh可以实现更强大的命令补全,命令高亮等一系列功能。不过代价就是启动速度会比原生的bash慢,这一点在添加了较多环境后尤为明显。
默认的zsh配置有点麻烦。因此一个叫robbyrussel的用户在GitHub上制作了一个配置文件oh-my-zsh,这是目前为止最流行的zsh配置。( oh-my-zsh项目地址)[https://github.com/robbyrussell/oh-my-zsh]

安装zsh

1
sudo apt-get install zsh

使用cat /etc/shells查看系统可以用的shell

1
2
3
4
5
6
7
8
9
10
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh

设置系统默认shell

1
chsh -s /bin/zsh

新开一个终端,就可以使用zsh

安装oh-my-zsh

1
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

配置

zsh的配置在用户当前目录的.zshrc

修改主题

Themes 中查看内置的主题样式和对应的主题名。这些内置主题已经放在~/.oh-my-zsh/themes目录下,不需要再下载。默认的是robbyrussell ,个人习惯用ys

安装插件

oh-my-zsh已经内置了git插件,内置插件可以在~/.oh-my-zsh/plugins 中查看,更多插件可以在awesome-zsh-plugins 里查看。常用的需要额外下载的插件如下

  • zsh-autosuggestions
    zsh-autosuggestions是一个命令提示插件,当输入命令时,会自动推测可能需要输入的命令,按下右键可以快速采用建议。
    安装步骤:
    • 把插件下载到本地的~/.oh-my-zsh/custom/plugins目录
      1
      
      git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
      
    • .zshrc中,把zsh-autosuggestions加入插件列表
      1
      2
      3
      4
      
      plugins=(
          # other plugins...
          zsh-autosuggestions  # 插件之间使用空格隔开
      )
      
    • 开启新的终端或执行source ~/.zshrc
  • zsh-syntax-highlighting
    zsh-syntax-highlighting 是一个命令语法校验插件,在输入命令的过程中,若指令不合法,则指令显示为红色,若指令合法就会显示为绿色。
    安装步骤:
    • 把插件下载到本地的~/.oh-my-zsh/custom/plugins目录
      1
      
      git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting 
      
    • .zshrc中,把 zsh-syntax-highlighting 加入插件列表
      1
      2
      3
      4
      
      plugins=(
          # other plugins...
          zsh-syntax-highlighting
      )
      
    • 开启新的终端或执行source ~/.zshrc
  • extract extract用于解压任何压缩文件,不必根据压缩文件的后缀名来压缩,使用x命令即可解压文件

安装步骤:

  • 直接在.zshrc中,把 extract 加入插件列表
    1
    2
    3
    4
    
      plugins=(
          # other plugins...
          extract
      )
    
  • conda-zsh-completion
    conda-zsh-completion是conda的自动补全插件 安装步骤:
    • 把插件下载到本地的~/.oh-my-zsh/custom/plugins目录
      1
      
       git clone https://github.com/esc/conda-zsh-completion $ZSH_CUSTOM/plugins/conda-zsh-completion
      
    • .zshrc中,把conda-zsh-completion加入插件列表
      1
      2
      3
      4
      
      plugins=(
          # other plugins...
          conda-zsh-completion  # 插件之间使用空格隔开
      )
      
    • 开启新的终端或执行source ~/.zshrc

额外设置

  1. .zshrc中额外添加
1
setopt nonomatch

以实现通配符

ros2环境配置

在zshrc中source了环境后无法补全ros2和colcon的相关命令,首先安装

1
sudo apt-get install python3-argcomplete

然后在source环境前加上

1
2
eval "$(register-python-argcomplete3 ros2)"
eval "$(register-python-argcomplete3 colcon)"

以实现补全和快速跳转

一键配置脚本

时间相关

双系统时间错误

在Linux中安装ntpdate

1
sudo apt-get install ntpdate

更新本地时间

1
sudo ntpdate time.windows.com

最后,更新硬件:

1
sudo hwclock --localtime --systohc

一键配置脚本

修改启动等待时间为0

1
sudo vim /etc/grub.d/30_os-prober

修改

1
set timeout=0
1
sudo vim /etc/default/grub

修改

1
GRUB_TIMEOUT=0

最后更新grub.cfg文件,使改动生效

1
sudo update-grub

修改系统重启默认等待时间

1
sudo vim /etc/systemd/system.conf

#DefaultTimeoutStopSec=90s取消注释,并将DefaultTimeoutStopSec=90s改为DefaultTimeoutStopSec=3s

千万不要修改DefaultTimeoutStartSec,若修改时间太短,时间将不足以支持系统启动。如果不慎修改,在grub引导中选择recovery模式的root终端,用vim将其改回来

显卡相关

查询功率限制

1
nvidia-smi -q | grep 'Power Limit'

Alt text

设置持久模式

持久模式是一种让GPU驱动程序在系统启动时就加载并一直保持运行的模式,可以避免在每次运行GPU应用程序时重新初始化GPU的开销

1
sudo nvidia-smi -pm 1

开机自启

1
sudo vim /lib/systemd/system/nvidia-persistenced.service

添加如下内容

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=NVIDIA Persistence Mode

[Service]
Type=oneshot
ExecStart=/usr/bin/sudo /usr/bin/nvidia-smi -pm 1
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

重新加载 systemd 配置

1
sudo systemctl daemon-reload

开机自启

1
2
sudo systemctl enable nvidia-persistenced.service
sudo systemctl start nvidia-persistenced.service

设置功耗

1
sudo nvidia-smi -pl 140

开机自启

1
sudo vim /lib/systemd/system/nvidia-power.service
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=NVIDIA Power Restrict

[Service]
Type=oneshot
ExecStart=/usr/bin/sudo /usr/bin/nvidia-smi -pl 140
RemainAfterExit=true

[Install]
WantedBy=multi-user.target

重新加载 systemd 配置

1
sudo systemctl daemon-reload

开机自启

1
2
sudo systemctl enable nvidia-power.service
sudo systemctl start nvidia-power.service

使用.run安装的显卡驱动可能不支持此方法修改功耗

nvidia-powerd

在30系及以后的显卡中,使用了一种新类型的服务nvidia-powerd对显卡功耗进行控制操作

1
sudo nvidia-powerd

开机自启

1
sudo systemctl enable nvidia-powerd

添加sudo权限

1
sudo vim nvidia-powerd.service

ExecStart=/usr/bin/nvidia-powerd修改为ExecStart=/usr/bin/sudo /usr/bin/nvidia-powerd

添加D-Bus权限

1
sudo vim /etc/dbus-1/system.d/nvidia-powerd.conf

添加如下内容

1
2
3
4
5
6
7
8
9
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy user="root">
    <allow own="nvidia.powerd.server"/>
    <allow send_destination="nvidia.powerd.server"/>
    <allow receive_sender="nvidia.powerd.server"/>
  </policy>
</busconfig>

启用服务

1
sudo systemctl start nvidia-powerd
This post is licensed under CC BY 4.0 by the author.