[Repost] Linux Most Like macOS (Kubuntu) Configuration Tutorial

:pushpin: Original Link: 手把手带你打造一个媲美 macOS 的 Linux 生产力系统 | 国光

Stop envying macOS’s exquisite interface; Linux can also achieve such refined and smooth interactive experiences. What are you waiting for!? Quickly make Linux your primary system~

Foreword

In the past month, I have installed many Linux distributions and deeply experienced them. I have tried Arch Linux and Kali Linux, used the radical Hyprland desktop as well as the traditional GNOME, and also the flashy DDE. In the end, I honestly chose Kubuntu 24.04:

The main reasons for choosing Kubuntu 24.04 are:

  1. Based on Ubuntu LTS 24.04 version, it is stable and has a relatively low learning threshold.
  2. Kubuntu comes with KDE 5 desktop, which currently has strong extensibility.
  3. KDE6 desktop is not compatible with Latte Dock, losing the essence of mimicking MacOS.

System Installation

This installation uses a dual-boot scheme, which I recommend if your hard drive is large enough, since gaming still requires Windows system!

It is recommended to select the default [English language] first, then select [Normal mode] installation, since we intend to use it as the main system:

Disk partitioning is critical. If you are dual-booting, it is recommended to manually partition the disk:

From my 2TB hard drive, I allocated over 800GB for Linux installation. The specific disk partition details are as follows:

Finally, here is a summary overview of my overall settings:

Basic Preparation

Update Sources

# Switch to root user
sudo -i

# Backup existing sources list
mv /etc/apt/sources.list /etc/apt/sources.list.bak

# Add USTC mirror source for Ubuntu 24.04
echo "deb https://mirrors.ustc.edu.cn/ubuntu/ noble main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb https://mirrors.ustc.edu.cn/ubuntu/ noble-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb https://mirrors.ustc.edu.cn/ubuntu/ noble-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb https://mirrors.ustc.edu.cn/ubuntu/ noble-backports main restricted universe multiverse" >> /etc/apt/sources.list

# Refresh and check speed
apt update

Basic Tools

With updated sources, install some essential tools for geeks:

# Classic essentials
sudo apt install curl wget git vim

# netstat for network outbound analysis
sudo apt install net-tools

# traceroute for path tracing
sudo apt install traceroute

Chinese Input

First, install related dependencies for Chinese language environment:

sudo apt install fcitx5-frontend-gtk2 fonts-arphic-ukai fonts-arphic-uming fonts-noto-cjk-extra language-pack-zh-hans libreoffice-help-zh-cn libreoffice-l10n-zh-cn

Then change the language to: [Simplified Chinese]

After changing, restart or log out to apply. Manually add the [Pinyin] input method:

Since Sogou Input Method does not yet support Fcitx5 input framework officially, we can’t roll back to Fcitx4 just for an input method:

Here I referenced this article: fcitx5_customizer — an optimization script making Fcitx5 more user-friendly for Simplified Chinese users

You only need a single command to optimize our Fcitx5 input method:

# Run online and use recommended config
curl -sSL https://www.debuggerx.com/fcitx5_customizer/fcitx5_customizer.sh | bash -s -- recommend

You can configure it further according to your preferences:

Later, we can improve the input method skin in settings:

I recommend using the minimalist and elegant Dracula skin. With this configuration, our built-in input method has become very smooth — who needs Sogou Input Method anymore!

Language Environment

Manually edit the locale file to ensure it’s all Chinese:

sudo vim /etc/default/locale

Edit content as follows:

LANG=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_MONETARY=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_NUMERIC=zh_CN.UTF-8
LC_PAPER=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8

Switching Desktop Environment

Kubuntu 24.04 comes with KDE 5 defaulting to the X11 desktop protocol, which is really a relic from the 1980s. Although compatibility is decent, times have changed. We need to embrace the Wayland protocol to enjoy smoother desktop experience, better touchpad gesture support, finer HiDPI display scaling details, better support for high-res and high refresh rate monitors, and more elegant and efficient desktop workflow…

So let’s directly start installation:

sudo apt install plasma-workspace-wayland

After installation, reboot and upon next login choose the Wayland session at the bottom left of the login screen. You can then experience a much smoother Linux desktop.

Input Compatibility

Resolve Warnings

When using Wayland protocol, Fcitx penguin input method raises warnings:

Following the prompt, set as instructed:

After logout or reboot, a new warning appears:

Detected GTK_IM_MODULE and QT_IM_MODULE set and Wayland input frontend is working properly. It is recommended not to set GTK_IM_MODULE and QT_IM_MODULE to use the Wayland input frontend. For more info see https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland#KDE_Plasma

According to official advice, this happens because Kubuntu globally sets these environment variables to maintain compatibility with X11 applications:

$ env |grep fcitx
GTK_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
SDL_IM_MODULE=fcitx
QT_IM_MODULE=fcitx

Fcitx5’s official position is that these three variables do not need to be set:

GTK_IM_MODULE & QT_IM_MODULE & SDL_IM_MODULE

Applications running in XWayland compatibility mode only need:

XMODIFIERS=@im=fcitx

For applications like chromium/electron, it is recommended to start with these parameters:

--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime

Thus, the fix is to manually unset these three environment variables:

# Switch to root user
sudo -i

# Override /etc/environment variables
echo "unset GTK_IM_MODULE" >> ~/.profile
echo "unset QT_IM_MODULE" >> ~/.profile
echo "unset SDL_IM_MODULE" >> ~/.profile

This resolves the Wayland warning.

Application Optimization

After this setting, applications natively friendly with Wayland input method, such as Firefox browser, should have input methods working at their best. However, some conservative apps show noticeable cursor and panel offset with input method, so they still require manually adding the environment variables back.

For example, for the Typora app I’m using to write this article, find the Typora icon in the application menu, right-click “Edit Application,” and manually add back these variables:

GTK_IM_MODULE=fcitx SDL_IM_MODULE=fcitx QT_IM_MODULE=fcitx

This makes the input method work optimally in Typora.

For other apps with input issues, you can imitate this approach.

Usage Tips

Common shortcuts for fcitx5 input method on Linux:

Shortcut Combination Description
Space Switch input method
Left Shift Temporarily switch input method

Some users might find that temporarily switching input with Left Shift sometimes doesn’t work, but sometimes it does. After several days of testing, I found this rule:

In the application where you want to input, first manually switch the input method using Ctrl + Space, then Left Shift works properly. The experience afterward is as smooth as on Windows.

Operation Optimization

To do the job well, first sharpen the tools. Before optimizing basic operations, let’s learn the default KDE5 keyboard shortcuts and touchpad gestures:

Keyboard Shortcuts

KDE comes with many efficient shortcuts. Here are the ones I often use:

Shortcut Description
Super (Windows key) Open application menu
F11 Fullscreen application
Super + W or Top-left hot corner Open all workspace views
Super + E Open file manager
Super + L Lock screen
Ctrl + Alt + Del Open logout menu
Super + D or Ctrl + F12 Show desktop
Alt + Tab Switch to next window
Alt + Shift + Tab Switch to previous window
Ctrl + Super + Left/Right Arrow Switch workspace left/right
Alt + Space Open KRunner search
Ctrl + Alt + T Open default terminal
Super + Arrow keys Move window up/down/left/right
Alt + F4 Close current window
Super + PgUp Maximize window
Super + PgDn Minimize window
Super + Plus Partial screen magnifier zoom-in
Super + Minus Partial screen magnifier zoom-out
PrtSc Invoke Spectacle full-screen screenshot
Super + PrtSc Invoke Spectacle window screenshot
Shift + Super + PrtSc Invoke Spectacle area screenshot

Touchpad Gestures

As a laptop user, touchpad gestures are essential. Here are the basic KDE5 gestures:

Gesture Description
Two-finger tap Right-click
Two-finger scroll Scroll page up/down
Three-finger horizontal scroll Switch workspace
Four-finger horizontal scroll Switch workspace
Four-finger swipe up Open all workspace views
Four-finger swipe down Show all windows in current workspace
Four-finger pinch Open all workspace and window views

macOS-style Enhancements

If you are an experienced macOS user, you can gradually align mouse and touchpad to macOS work style:

Touchpad settings details:

Numeric Keypad

If your laptop has a built-in numeric keypad, it’s recommended to enable it in settings:

Keyboard Response

[Settings] - [Input Devices] - [Keyboard] allows you to increase cursor movement speed to make moving the cursor over long commands smoother:

Proxy Tools

To do things well, first sharpen the tools. In the domestic environment, using proxy tools is essential for elegantly configuring your Linux system. Hence after the basic configuration, I start directly on proxy configuration topics.

“Watt Toolkit” is an open-source, cross-platform, free, and multifunctional Steam toolbox. On the surface, it’s a game accelerator, but it also proxies sites like Github and other common foreign websites. Official site: https://steampp.net

The official automated installation script makes installation very convenient:

curl -sSL https://steampp.net/Install/Linux.sh | bash

Choose the default path to create corresponding shortcuts:

Manually grant write permission to our hosts file:

sudo chmod a+w /etc/hosts

So you can start acceleration directly. The principle is modifying the hosts file:

However, accessing Github still gives certificate-related issues:

We follow the official solution: Linux Certificate Import Tutorial

Locate the local certificate folder:

Import it directly into Firefox browser:

Then you can elegantly access Github using Firefox:

Clash Verge

Official project: GitHub - clash-verge-rev/clash-verge-rev: A modern GUI client based on Tauri, designed to run in Windows, macOS and Linux for tailored proxy experience

Download the latest deb package from release and install using gdebi:

# Directly install with gdebi
sudo gdebi clash-verge_1.7.7_amd64.deb 

# But got a warning
This package cannot be installed
Dependency is not satisfiable: libwebkit2gtk-4.0-37

According to official docs, Ubuntu 24.04 requires additional libwebkit2gtk and libjavascriptcoregtk dependencies. Download and install the corresponding versions according to architecture.

sudo gdebi libjavascriptcoregtk-4.0-18_2.43.3-1_amd64.deb
sudo gdebi libwebkit2gtk-4.0-37_2.43.3-1_amd64.deb 

If you encounter tricky network problems later, try enabling Clash’s Tun mode for simpler and more thorough proxying:

Shadowsocks Electron

The classic old resource is still retained in the Starfire Store: spk://store/network/shadowsocks-electron

I tested SSR subscription link parsing normally. If worried about Clash exposing your IP, you can try this:

proxychains4

A command line proxy tool on Linux, also commonly used in intranet penetration:

sudo apt install proxychains4

Config file path is:

sudo vim /etc/proxychains4.conf

Test proxy effect:

proxychains4 curl https://www.google.com
```# Fruit-themed Beautification

## Kvantum

Kvantum is a highly customizable open-source theme engine specifically designed for Qt-based applications. It allows users to define and apply complex themes through SVG (Scalable Vector Graphics) files to change the appearance of applications.

Installation is also quite simple:

sudo add-apt-repository ppa:papirus/papirus
sudo apt update
sudo apt install qt5-style-kvantum qt5-style-kvantum-l10n qt5-style-kvantum-themes


## WhiteSur-kde

Since the appearance style after macOS Big Sur is basically similar, we leveraged the [WhiteSur-kde](https://github.com/vinceliuice/WhiteSur-kde) project this time. Installation is also straightforward:

git clone GitHub - vinceliuice/WhiteSur-kde: MacOS big sur theme for kde plasma
cd WhiteSur-kde
./install.sh


Then just select the theme we just installed in the settings. Guoguang personally prefers a dark theme:

![](upload://z29bXfr64xyXJ9ybvF5sL7xmfdC.jpeg)

This basically forms a prototype of the appearance:

![](upload://kkBGxhOrvx8clgNLqLccmG0s9TA.jpeg)

## WhiteSur-icon-theme

For a more realistic look, we need to install macOS-related icon themes. Installation is also quite simple:

git clone GitHub - vinceliuice/WhiteSur-icon-theme: MacOS Big Sur style icon theme for linux desktops
cd WhiteSur-icon-theme
./install.sh


After configuration, enable this icon theme in settings. The overall effect is already very close to macOS:

![](upload://32yXqZArecshBPNpI9wA8PCzL0o.jpeg)

## Mouse Cursor Style

For the mouse cursor style, Guoguang recommends: [Capitaine Cursors](https://store.kde.org/p/1148692). The r4 version is more friendly to high-resolution screens and KDE, so the final choice is the `capitaine-cursors-light-r4.tar.gz` cursor style version:

![](upload://hbPHw06Ds9Cm8lyTfkA1E79nb0G.jpeg)

## Latte Dock

Another appearance feature of macOS is the Dock. Fortunately, KDE5 has the famous [Latte Dock](https://github.com/KDE/latte-dock). Installation is also quite straightforward:

sudo apt install latte-dock


However, using it directly after installation is somewhat lacking in details:

![](upload://cFlrsj9XGy5sTb7W7w92hZeDW0T.png)

Then right-click on Latte Dock, select [Configure Latte Dock] - [Layout Editor], find the bottom-right [Import] - [Import from KDE Store]. This time we use the WhiteSur latte appearance style matching our theme:

![](upload://623FwbDyTXg01q8V3LF1dfSrFsq.png)

The overall effect is as follows:

![](upload://sVXDsd0XAKXEHxURLdaI4uY4KPX.png)

## Widgets Recommendation

### Widget Overview

### Widget Optimization

* **Window Title Applet**

Below is a setting detail closer to macOS:

![](upload://sVuQ8Yfn0C8kzmzSDFeDuSVC6u4.png)

* **Control Centre**

Download the https://github.com/Prayag2/kde_controlcentre/releases/download/0.1.0/kde_controlcentre0.1.0.tar.gz file from Github, then manually install via command line:

kpackagetool5 -i kde_controlcentre0.1.0.tar.gz


* **CatWalk**

Since there are already other plugins that can display CPU usage, for a cleaner interface, I only recommend using the cat icon here:

![](upload://rURUdC5Gya8NNrMRnbavW0GZ6vk.png)

* **Resources Monitor - fork**

The default font size of this visual performance monitor is too small. It is recommended to set it a bit larger yourself:

![](upload://9L4uKRsbXo16VseSZ3X9yLRwz0y.png)

* **Netspeed Widget**

![](upload://gheR12GhypWc4B1sUH4iISuuvqG.png)

## Right Sidebar

With Latte Dock, we can achieve a sidebar effect similar to macOS. First, make sure to install the [Latte SideBar Button](https://store.kde.org/p/1365044) plugin, which enables the sidebar.

### Add Panel

First, edit the current Latte Dock configuration to manually add a [spaced-aligned] [empty panel] on the [right side]:

![](upload://dkSiLvspGGk7CXbPVHznylxtPwI.jpeg)

### Panel Behavior

Find the panel you just added with the mouse, right-click [Edit Panel], keep the type as the default [Panel], then enable [Dock to top] and [Dock to bottom], then choose [Auto-hide sidebar], and check the options you like as needed:

![](upload://rSHa4gZM73nvOnGRW1SGz8gxsHs.jpeg)

### Panel Appearance

Guoguang’s tuning parameters for this part are as follows:

![](upload://pdVR8jVFQ96G8pLRhJhtnXyFX3J.jpeg)

### Panel Effects

It is recommended to install the [Dash To Panel] task indicator decoration:

![](upload://lgrOdYhUJ8x4bxrtEyLMfhr57W9.jpeg)

### Panel Widgets

After extensive testing, Guoguang’s final sidebar layout order from top to bottom is: [HTML Clock](https://store.kde.org/p/1473016) - Calendar - Performance monitoring data

First add the [HTML Clock](https://store.kde.org/p/1473016) widget, then set the layout to the comprehensive style as shown in the image above, then enable "Colorize this applet":

![](http://www.kdocs.cn/api/v3/office/copy/a0hSZlNISWEybTlsUHRBT3Bhck9KU3U3R3NoVWozVHhzcEluUkVLUnRuM1lWNUdEaXlseDVFY0MzZGN5RkFhYWZyRjdJb0lGVUFYNExGdTJoN1VralMzN0t4d0NuNDZQbXpWWnpMNWZFaEloZGhIOW1xNUh0alBINE5BRG5UcVY3eTlSdE5adys0dDR5TE96WG13Q2cyRWFDdUFxRmdkZmE5RmwwLzVqSUtvZzB3MG4zU20vT2htUUxNZk1kQi9tLzRRWDM2MlBHZWZmYmRNSU9CWVh5dmIxL05OYjRYeGhmZHR4ZFlSY3VReXg2UUxIOC9NNVBGamxDQzFXc1V4Y2JOZEd0d2ZQZkYwPQ==/attach/object/getkeyerr?)

Next, add a system built-in calendar widget below. It is not recommended to enable "Colorize this applet" on the calendar:

![](upload://3J3N3fTPzH9q8woBlKxzpF9OatL.jpeg)

Finally, add the applet grouping below:

![](upload://t0pFimO8btq7bQQZwyStXiNGrLx.png)

Here, Guoguang has dragged and added CPU usage, memory usage, and network speed into the applet grouping respectively. It is not recommended to enable "Colorize this applet". Other details are all line charts. Whether to show titles or specific sensors is up to personal preference.

* **CPU Load**

![](upload://3f7DX0tM9IkbRp7nA0zbkKxA5JQ.jpeg)

* **Memory Usage**

![](upload://wkqVfc0DIyDREmp7PUAtYwMve0H.jpeg)

* **Network Monitoring**

![](upload://mQTugtj65qpKrgX9DG77VXaT34W.jpeg)

## Overall Effect

### Kvantum

First, select [kvantum] in Application Style:

![](upload://6PNcuowMSFA6UTth7CsNCIKoAQK.png)

Then open [Kvantum Manager], select the macOS style [WhiteSurDark] theme via [Change / Delete Theme], then click [Apply Theme]:

![](upload://37mf80SDJh4v4fjJztafgZ8gdt7.jpeg)

Next, enable all possible effects in [Configure Current Theme]:

![](upload://kVJ2fonAa4AzQodZkiFdjxurOSb.jpeg)

### Layout Arrangement

The overall top menu bar layout from left to right is as follows:

[Kpple Menu](https://store.kde.org/p/1384156)-[Window Title](https://store.kde.org/p/1274218)- Global Menu - Panel Spacer - Virtual Desktop Switcher -[Fokus](https://store.kde.org/p/1308861)-[Translator](https://store.kde.org/p/1395666)-[CatWalk](https://store.kde.org/p/2055225)-[Thermal Monitor](https://store.kde.org/p/2070765)-[Power Monitor](https://store.kde.org/p/1466838)-[Resources Monitor - fork](https://store.kde.org/p/1527636)- Network Speed -[Netspeed Widget](https://store.kde.org/p/998895)- System Tray - Clipboard - Audio Volume - Bluetooth - Network - Battery and Brightness - Search -[Control Centre](https://github.com/Prayag2/kde_controlcentre)- Digital Clock -[Ltte SideBar Button](https://store.kde.org/p/1365044)

For the system tray, Guoguang suggests hiding everything that can be hidden. What we need can be individually added to the menu bar. The system tray should focus solely on tray-related tasks:

![](upload://5Pcq8vaeRfmeOorQ1A0808cIYDW.jpeg)

### Appearance Details

* [Global Theme] - [WhiteSur-dark]
* [Global Theme] - [Application Style] - [kvantum]
* [Global Theme] - [Plasma Look and Feel] - [WhiteSur Dark Apple]
* [Global Theme] - [Window Decorations] - [Sweet-Dark-transparent](https://store.kde.org/p/1286856)
* [Global Theme] - [Colors] - [WhiteSurDark]
* [Global Theme] - [Icons] - [WhiteSur-dark]
* [Global Theme] - [Cursors] - [Capitaine Cursors Light]
* [Global Theme] - [Splash Screen] - [Orchis-dark]
* [Global Theme] - [Boot Splash] - [apple-mac-plymouth]

### Desktop Effects

This is Guoguang's recommendation: enable all effects that are acceptable:

![](upload://dtDjHe4KD2IeEPIwcvXEkgpBMdB.jpeg)

The window transparency needs to be set separately, which improves the overall blur aesthetics a bit:

![](upload://npm282M2SQb6qKBv05AHITaRKL9.png)

# System Enhancements

## Driver Improvement

By default, for this laptop (Machinery Revolution Infinite 15X), there is no domestic Ethernet card driver under Linux. Fortunately, the official website provides a download link for the driver:

[Ethernet Chip - Motorcomm Semiconductor Ltd.](https://www.motor-comm.com/product/ethernet-control-chip)

![](upload://gTAOIbfn1Pjx4olH7L1U7IAuVk2.jpeg)

The driver installation is simple; install dependencies for compiling the driver, then just run the script:

Switch to root

sudo -i

Run driver installation script

./yt_nic_install.sh


![](upload://jZEDqqtaZtAqDBtZo5Vd04FRJFl.jpeg)

## Screenshot Enhancement

Kubuntu’s default Spectacle screenshot tool is decent, but not as powerful and smooth as [Snipaste](https://zh.snipaste.com/). The only thing to note is that many default shortcuts of this screenshot software conflict with KDE desktop shortcuts, so you need to set your own shortcuts to avoid conflicts:

![](upload://2owIe7s9tVgJcAZzL17K22EghhX.jpeg)

## Mouse Enhancement

In the Discover store, install [Piper], which facilitates easy custom management of our mouse so that side buttons can be fully utilized:

![](upload://luY7JNon2Pln3cpv9IpG9qg0gMb.jpeg)

## Categorization and Grading

The built-in KDE application classification does not satisfy Guoguang's needs. It is recommended to re-classify applications using KDE's own [KDE Menu Editor]:

![](upload://kTXhDWcNLyJFiVLZH5oYjbksgRJ.jpeg)

## Traffic Monitoring

[OpenSnitch](https://github.com/evilsocket/opensnitch) is an interactive GNU/Linux application firewall, inspired by Little Snitch.

Install daemon

sudo gdebi opensnitch_1.6.6-1_amd64.deb

Enable daemon on boot

sudo systemctl enable --now opensnitch.service

Install graphical interface

sudo gdebi python3-opensnitch-ui_1.6.6-1_all.deb


This allows you to have full visibility of all application network traffic:

![](upload://cMV4VBGMmtdROIHgYzG5Tc07DI6.jpeg)

This feeling is the true Linux experience: I want to know all traffic clearly:

![](upload://pLIKkCWM9BQAZcXUuBWdfkzDI5u.jpeg)

## File Transfer

No need to envy Apple’s AirDrop ecosystem. With the open-source project [localsend](https://github.com/localsend/localsend), we can easily achieve this. Installation is simple; just download the deb package from the [official website](https://localsend.org/zh-CN/download?os=linux):

sudo gdebi LocalSend-1.15.4-linux-x86-64.deb


![](upload://izebA8YtGyMUoFFDFpkZ8X9rBp0.png)

## Code Server

## Installation Guide

Download the latest deb package directly from the official project’s [Release](https://github.com/coder/code-server/releases) page and install:

sudo gdebi code-server_4.93.1_amd64.deb


The default configuration is stored at:

cat ~/.config/code-server/config.yaml


Start Code Server directly with:

code-server


## CrossOver

### Installation Overview

If you really plan to use Linux as your main system and do not want to run some essential .exe programs in a virtual machine, you can check out [CrossOver](https://www.codeweavers.com/). It offers about a two-week trial, enough for you to experience:

![](upload://lkNS7jnLHFaYRuys3XWhkUUdNE0.jpeg)

If you are accustomed to it, consider buying an official activation code for around 80 RMB on secondary markets. If after purchase the activation fails due to registration issues, you can manually download the license file from the official website and place it under the following directory in CrossOver:

/opt/cxoffice/etc


![](upload://nVPci0LVFs3Mu4gt2a2O02wuVlS.jpeg)

### Software Comparison

Below is a comparison between Audacity running through CrossOver and the official AppImage version. It shows that the paid CrossOver is really worth it:

![](upload://vQcSnAfCf9EAGTo6gQ4Rp1LttDH.png)

On the left is the paid CrossOver, on the right is the official AppImage version. It can be seen that the CrossOver experience is very close to Windows, much more refined.

## Software Performance

Here are some screenshots of software working well under CrossOver:

* **NetEase Cloud Music**

![](upload://1aTjqq223CQIXNenoLVtjkcb0l3.jpeg)

* **Notepad++**

![](upload://mbECC7rv6Z3ADybBYCOTJMJOFtc.png)

* **ResourceHacker**

![](upload://z7mwoyxvIKOy0GHZ5CDQp4ZVXW0.png)

### Firefox Portable Penetration Version

![](upload://uu1ikGJaoA5NYMC3XQMxWQ1AUxV.jpeg)

## Command Environment

The default bash shell is too plain, so it is recommended to use the zsh shell environment. Kali Linux now defaults to the zsh shell environment, which truly supports more plugins and can improve our command input efficiency.

Install zsh

sudo apt install zsh

Change default shell to zsh

chsh -s /bin/zsh

Install oh-my-zsh

sh -c “$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)”


Log out or reboot for zsh to take effect as the default shell.

Recommended classic plugins for zsh installation:

Quick directory switching

sudo apt install autojump

Auto-suggest next commands

git clone GitHub - zsh-users/zsh-autosuggestions: Fish-like autosuggestions for zsh $ZSH_CUSTOM/plugins/zsh-autosuggestions

Command syntax checking

git clone GitHub - zsh-users/zsh-syntax-highlighting: Fish shell like syntax highlighting for Zsh. $ZSH_CUSTOM/plugins/zsh-syntax-highlighting


Enable these plugins in `~/.zshrc`:

plugins=(git autojump zsh-autosuggestions zsh-syntax-highlighting)


Additional `~/.zshrc` configurations:

Disable URL backslash escaping

DISABLE_MAGIC_FUNCTIONS=“true”

Disable automatic updates in oh-my-zsh

zstyle ‘:omz:update’ mode disabled


Careful users will notice that switching to root still shows the bash shell, which can be a bit uncomfortable for perfectionists.

Let's also configure the zsh shell for the root user. First, manually set zsh as the default shell for root:

Switch to root

sudo -i

Set root user’s default shell to zsh

chsh --shell /bin/zsh


Then switch back to the normal user and create symbolic links to link the zsh configuration from our normal user's home:

sudo ln -s $HOME/.oh-my-zsh /root/.oh-my-zsh
sudo ln -s $HOME/.zshrc /root/.zshrc


This should basically work well, but you may still see some warning messages:

![](upload://1PsepaBEk2rmZUNtCNDUy3ootXG.png)

Add this line in `~/.zshrc` to suppress the warning:

ZSH_DISABLE_COMPFIX=“true”


Now our root user can smoothly use zsh:

![](upload://umALbwHvg1Ck0ycBI0hbf7PgpUl.png)

## Command Beautification

### Font Installation

To ensure the icons in the fancy configurations below display properly, we recommend setting up your terminal fonts ahead of time.

Icon font download link: [Nerd Fonts - Iconic font aggregator, glyphs/icons collection, & fonts patcher](https://www.nerdfonts.com/font-downloads)

![](upload://hbJkkMpFqWpaf3TvVClip2ubtLV.jpeg)

Actually, downloading the first one, 【0xProtoNerdFont】, already has pretty good effect. Of course, you can try more fonts yourself.

Font installation is simple—right-click on the font and install it as a 【system font】:

![](upload://u8QYRgc0PDyezgXXfAih0cS7stP.jpeg)

### Terminal Configuration

The built-in schemes are read-only and cannot be edited, so we need to create our own configuration scheme:

![](upload://5iHQP6mEcjXNPU9rSapzIV4G6Fa.jpeg)

Just configure it based on your preference. Here, I only emphasize configuring the font we just installed:

![](upload://2z5UFv6lXQ0cZyZ3O6McweUsp3x.jpeg)

### Fancy Decorations

This time I'm using my previous project: https://github.com/sqlsec/fastfetch

Fastfetch is a tool similar to [neofetch](https://github.com/dylanaraps/neofetch), used for fetching system info and displaying it beautifully. It is mainly written in C language, with performance and customizability in mind. This project is a Fastfetch plugin mainly integrating Pokémon display and other playful images, currently only tested on Linux and macOS.

First, install Fastfetch:

sudo add-apt-repository ppa:zhangsongcui3371/fastfetch
sudo apt update
sudo apt install fastfetch


Then install the Pokémon for terminal:

git clone Phoney badger / pokemon-colorscripts · GitLab
cd pokemon-colorscripts
sudo ./install.sh

Test if it works

pokemon-colorscripts -r --no-title


Import our configuration:

Backup original config (if this fails, no default config exists)

mv $HOME/.config/fastfetch $HOME/.config/fastfetch.bak

Enter .config directory

cd $HOME/.config

Download, unzip, then delete

wget https://github.com/sqlsec/fastfetch/releases/download/v0.1/fastfetch-for-Linux.zip
unzip fastfetch-for-Linux.zip && rm fastfetch-for-Linux.zip


The final fancy fastfetch effect looks like this:

![](upload://4sl5oQiiWCPcxx6gsfT67KaxDSG.jpeg)

If you want the root user also to use the fancy fastfetch, you can create a symbolic link to the config folder in the normal user's home:

sudo ln -s $HOME/.config/fastfetch /root/.config/fastfetch


To have a different random Pokémon appear every time you open zsh, manually append this to the zsh configuration:

echo “pokemon-colorscripts -r --no-title” >> ~/.zshrc


### Theme Beautification

#### Download and Install Theme

This time we use the famous powerlevel10k theme. First, git clone the theme into our theme directory:

git clone --depth=1 GitHub - romkatv/powerlevel10k: A Zsh theme ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k


Enable the new theme in `~/.zshrc`:

ZSH_THEME=“powerlevel10k/powerlevel10k”


#### Theme Configuration Wizard

Reload the zsh terminal to automatically enter the powerlevel10k theme configuration wizard:

zsh


Answer y or n according to the prompts. Here are some questions from the wizard:

Does this look like a diamond (rotated square)?

Does this look like a diamond (rotated square)?

Does this look like a lock?

Does this look like a lock?

Does this look like an upwards arrow?

Does this look like an upwards arrow?

Do all these icons fit between the crosses?

Do all these icons fit between the crosses?


After the questions, select a prompt style. I definitely chose the coolest Rainbow style:

![](upload://wnXJUk1ziyYZH1nlCqIah3lxq7T.png)

For encoding, it is recommended to use a more standard and advanced Unicode encoding:

![](upload://1NHW15RcJ44UrdGVLNCyiwINmKY.png)

Other settings can be customized to your liking; I won't list them one by one:

![](upload://dY874wmNinl0a6D9ZqNiIA6XYLY.jpeg)

If you accidentally misconfigure during this process, you can run:

p10k configure


to redo the configuration wizard.

#### Fix Warning Issues

After configuring the theme and reloading zsh, you may find warning messages:

![](upload://4PdE1tFxkUOySa0M33K4AXmGWgT.png)

It turns out our config has problems here:

![](upload://p2WX2DQzW6Fndpji3UIpwpUxFn4.png)

Manually edit the `.p10k.zsh` configuration file:

![](upload://xiKgM6hpzPKHv2OYQCOmJ1Vq2Bt.png)

The final effect of our command line terminal is as follows:

![](upload://kCTu4wOkebhM85EhPTRbkNWwuXs.png)

# Remote Environment

## Penetration Tool

This chapter mainly uses ZeroTier to build a penetration environment. This is my personal productivity setup; friends can learn about it but don't have to copy it exactly.

First, we need to use the [xubiaolin/docker-zerotier-planet: One-minute private ZeroTier-planet service deployment (github.com)](https://github.com/xubiaolin/docker-zerotier-planet) project to build our own ZeroTier relay server. Each of our private servers has its own corresponding planet file; using different planet files connects to different ZeroTier services.

First, install the official ZeroTier client locally:

curl -s https://install.zerotier.com | sudo bash


After installation, enable autostart and join the network directly:

Enable zerotier startup

systemctl enable zerotier-one.service

Backup official planet file

sudo mv /var/lib/zerotier-one/planet /var/lib/zerotier-one/planet.bak

Download and replace your planet

xxxxxxx omitted here xxxxxxxx

Start zerotier service

systemctl start zerotier-one.service


We use the Docker version for the other client:

docker run --name zerotier-one --device=/dev/net/tun --net=host --cap-add=NET_ADMIN --cap-add=SYS_ADMIN -v /home/x-x/Documents/Tools/zerotier:/var/lib/zerotier-one --restart=always -d zerotier/zerotier


Set `/home/x-x/Tools/zerotier/` to your own local folder.

Because two ZeroTier client ports conflict, only one can run at a time, so we need to manually change the Docker port to another port:

vim /var/lib/zerotier-one/local.conf


Here I changed it to port 9333:

![](upload://8b8x2Fe9UhSycNgzTIG7AVGEuWf.png)

After configuration, you can use two different ZeroTier planets simultaneously:

![](upload://wbGeX5TCk2Slg7W1UVzRjV0eovc.png)

## SSH Server

Kubuntu only has an SSH client by default, so if you want to remotely control this machine from other devices, you need to install the SSH server:

Install SSH Server

sudo apt install openssh-server

Enable SSH service at startup

sudo systemctl enable ssh.service


# Virtual Environment

## QEMU-KVM

QEMU is the native virtualization solution on Linux and the experience is very smooth. Installing it on Ubuntu is also simple:

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients cinst bridge-utils virt-manager virt-viewer


Enable startup and start the libvirt service:

sudo systemctl enable libvirtd
sudo systemctl start libvirtd


Add the current user to `libvirt` and `kvm` groups to manage without root privileges:

sudo usermod -aG libvirt (whoami) sudo usermod -aG kvm (whoami)


Reboot to apply changes.

Open the virtual system manager using `virt-manager`. The GUI is easy to operate, and we can create our own Windows virtual machine.

![](upload://kJV7ckLRsrsn8TUjhndHfAUzmEw.png)

Manually add a SATA CDROM device type, and set the source path to our system image:

![](upload://gbr0ZTsmhRNZXUhO7fecACqYmqA.png)

In the boot menu, check the CD image we just added, then reboot to install the system directly:

![](upload://pWCzgY4cETezZniKkmcZiTngvRY.png)

To improve the VM performance and user experience, we also need to install virtio drivers (similar to VMware tools).

Official virtio download at: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

Download the latest virtio-win.iso, then mount it to the VM and run 【virtio-win-guest-tools.exe】 to install:

![](upload://gj052DygNnS23QdlVx8iEfOcdv8.png)

## Docker

On Ubuntu, you can easily install Docker using the official automatic installation script:

Automatic install script

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

Add current user to docker group

sudo groupadd docker
sudo usermod -aG docker whoami

Reboot to apply changes

reboot

Verify Docker version output

docker version


After Docker installation, let’s prepare to install Docker Compose. First, check the latest stable version on the [official project](https://github.com/docker/compose/releases), then manually download and set executable permissions:

Download version 2.29.7 (latest at time of writing)

sudo curl -L “https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

Set executable permission

sudo chmod +x /usr/local/bin/docker-compose

Check Docker-compose version

$ docker-compose version
Docker Compose version v2.29.7


Finally, configure Docker to start automatically on boot:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service


## Waydroid

### Installation Guide

[Waydroid](https://waydro.id/) uses Linux namespaces (user, pid, uts, net, mount, ipc) to run a complete Android system in a container and provides Android applications on any GNU/Linux-based platform (arm, arm64, x86, x86_64).

Import repo source

curl https://repo.waydro.id | sudo bash

Install waydroid

sudo apt install waydroid -y


By default, click Next; before clicking Download, it is recommended to enable TUN mode in Clash to download and install:

![](upload://9KmBnHTayvI6frXLNSrNQ6yTna2.png)

### Display Interface

The default displayed interface looks a bit bulky and uncomfortable. We can modify the Hyprland configuration file to customize the startup interface size:

waydroid prop set persist.waydroid.width 480
waydroid prop set persist.waydroid.height 900


Restart waydroid to take effect:

waydroid session stop


If you want to move the window, use Super + mouse to drag.

### ARM Translation

Although this emulator is very smooth, by default, it cannot run ARM APKs, and there are few native x86 apps in China, so it is still necessary to install the ARM-related translation dependencies.

Clone project

git clone GitHub - casualsnek/waydroid_script: Python Script to add OpenGapps, Magisk, libhoudini translation library and libndk translation library to waydroid !
cd waydroid_script

Use pyenv virtual environment 3.8.20

pyenv local 3.8.20

Update pip to the latest version

python -m pip install --upgrade pip -i Simple Index

Install dependencies related to the script

python -m pip install -r requirements.txt -i Simple Index


Run the script:

sudo -i
python main.py


Here are my options for the CLI graphical interface for your reference:

![](upload://3vFFoIq7yNUMAul5pM2O5FL1lr8.png)

Now you can normally open the commonly used apps:

![](upload://5bE0e5nV8koIB4xKcKiCQO4ITcy.jpeg)

### Basic Usage

Shut down the current session

waydroid session stop

Restart the waydroid service

sudo systemctl restart waydroid-container.service


### Development Testing

Install adb development tool

apt install adb

Install apk package

waydroid app install /xxx/xxx/xx.apk

Connect via adb using IP (check locally)

adb connect 192.168.x.x:5555


Manually install BP certificate:

Convert BP certificate

openssl x509 -inform DER -in cacert.der -out cacert.pem

Calculate BP certificate hash

cert_hash=$(openssl x509 -subject_hash_old -in cacert.pem | head -1)

Create certificate folder

sudo mkdir -p /var/lib/waydroid/overlay/system/etc/security/cacerts/

Import certificate

sudo cp cacert.pem /var/lib/waydroid/overlay/system/etc/security/cacerts/${cert_hash}.0


Alternatively, you can also directly import the certificate by using the [waydroid_script](https://github.com/casualsnek/waydroid_script) project:

sudo python3 main.py install mitm --ca-cert cacert.pem


Then manually set the emulator's local proxy:

adb shell settings put global http_proxy “ip:port”


To cancel the proxy, use the following commands:

adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port
adb shell settings delete global http_proxy


Now you can test packet capture normally.

## Genymotion

### Basic Installation

Genymotion download and installation is simple; just directly [download from the official website](https://www.genymotion.com/product-desktop/download/) the corresponding installation package (default installs in the current directory, prepare the directory in advance):

chmod +x genymotion-3.7.1-linux_x64.bin
./genymotion-3.7.1-linux_x64.bin


Remember to register the corresponding account, although it is the free version:

![](upload://h4zFlyQgq22xY1RGH1Lwwpxo1yI.png)

On the surface, root permission is not supported to be enabled:

![](upload://2pnefHzswcpwkZ87evGB3RqMBKi.png)

But actually, manually entering adb shows you can still directly switch to the root user:

![](upload://9RveBGWwF27kx2g36CmC1ftMZNa.jpeg)

### ARM Translation

Although this emulator is very smooth, by default, it cannot run ARM APKs, and there are few native x86 apps in China, so it is still necessary to install the ARM-related translation dependencies.

This translation uses the https://github.com/niizam/Genymotion_A11_libhoudini project. Below are some operations details:

Open the Android 11 emulator, then operate directly in the command line below:

Enter adb, switch to root user, and mount the system root directory as read-write

adb shell
su
mount -o rw,remount /

Write content

echo ‘ro.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=x86_64,arm64-v8a
ro.vendor.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.vendor.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.vendor.product.cpu.abilist64=x86_64,arm64-v8a
ro.odm.product.cpu.abilist=x86_64,x86,arm64-v8a,armeabi-v7a,armeabi
ro.odm.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.odm.product.cpu.abilist64=x86_64,arm64-v8a
ro.dalvik.vm.native.bridge=libhoudini.so
ro.enable.native.bridge.exec=1
ro.enable.native.bridge.exec64=1
ro.dalvik.vm.isa.arm=x86
ro.dalvik.vm.isa.arm64=x86_64
ro.zygote=zygote64_32’ | tee -a /system/build.prop >> /system/vendor/build.prop


Download system.zip from the official [Release](https://github.com/niizam/Genymotion_A11_libhoudini/releases) page, drag it directly into the emulator, and confirm flashing according to the prompt:

![](upload://9k3xEcULVWuDWNzjeZQoA3lk3Ee.png)

After flashing is completed, restart the emulator directly.

Now you can normally open the commonly used apps:

![](upload://rglDonW1KAYxlP6bJhqTRXm6gdN.jpeg)

# Development Environment

## Git

If you want to use GitHub to collaborate on projects, GitHub will show the corresponding commit avatar based on our local Git configuration:

Configure email

➜ git config --global user.email “xxxxx@xxx.com

Configure username

➜ git config --global user.name “Guoguang”


The reason why the two commit records in the middle below have no avatars is that the email above is not configured:

![](upload://qDarXpvrvbYeqZBtSLBFzeQjR1Z.jpeg)

## Java

Whether it is the [Oracle JDK](https://www.oracle.com/hk/java/technologies/downloads/) or the OpenJDK that comes with Linux, we can install them all by ourselves; the more the better. With [jenv](https://github.com/jenv/jenv), we can switch between them flexibly.

* [**OracleJDK - JDK8**](https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html)

The classic JDK8 definitely needs to be installed:

Extract to /usr/lib/ directory

sudo tar -zxvf jdk-8u411-linux-x64.tar.gz -C /usr/lib/

Edit /etc/profile configuration file

sudo vim /etc/profile


Add the following content at the end:

JAVA_HOME=/usr/lib/jdk1.8.0_411
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH


Reload the configuration file to take effect:

Reload the configuration file

source /etc/profile

Verify if installed successfully

java -version


* [**OracleJDK - JDK17**](https://www.oracle.com/hk/java/technologies/downloads/#java17)

Download the deb package from the official website and install directly

sudo gdebi jdk-17_linux-x64_bin.deb

Default installation path is

/usr/lib/jvm/jdk-17.0.12-oracle-x64/


* [**OracleJDK - JDK21**](https://www.oracle.com/hk/java/technologies/downloads/#java21)

Download the deb package from the official website and install directly

sudo gdebi jdk-21_linux-x64_bin.deb

Default installation path is

/usr/lib/jvm/jdk-21.0.4-oracle-x64/


* [**OracleJDK - JDK23**](https://www.oracle.com/hk/java/technologies/downloads/#java23)

Download the deb package from the official website and install directly

sudo gdebi jdk-23_linux-x64_bin.deb

Default installation path is

/usr/lib/jvm/jdk-23-oracle-x64/


* OpenJDK series

Path: /usr/lib/jvm/java-8-openjdk-amd64/

sudo apt install openjdk-8-jdk

Path: /usr/lib/jvm/java-11-openjdk-amd64/

sudo apt install openjdk-11-jdk

Path: /usr/lib/jvm/java-17-openjdk-amd64/

sudo apt install openjdk-17-jdk

Path: /usr/lib/jvm/java-21-openjdk-amd64/

sudo apt install openjdk-21-jdk


Although we can use the system default:

update-alternatives --config java


to switch the system-wide default Java version simply and efficiently, it does not support project directory-level Java version management:

![](upload://4iaBPYDZMTVnhiUGUMUtFZgJo9Z.png)

At this time, we can consider the more flexible `jenv`, which can manage and switch Java versions globally, per user, and per project.

Installing jenv is not complicated:

Clone the project

git clone GitHub - jenv/jenv: Manage your Java environment ~/.jenv

Manually append zshrc configuration file

echo ‘export PATH=“$HOME/.jenv/bin:PATH"' >> ~/.zshrc echo 'eval "(jenv init -)”’ >> ~/.zshrc


Here are the basic usages:

View current Java version

jenv version

Manually add local Java Home paths

jenv add /usr/lib/jdk1.8.0_411/
jenv add /usr/lib/jvm/jdk-17.0.12-oracle-x64/
jenv add /usr/lib/jvm/jdk-21.0.4-oracle-x64/
jenv add /usr/lib/jvm/jdk-23-oracle-x64/
jenv add /usr/lib/jvm/java-8-openjdk-amd64/
jenv add /usr/lib/jvm/java-11-openjdk-amd64/
jenv add /usr/lib/jvm/java-17-openjdk-amd64/
jenv add /usr/lib/jvm/java-21-openjdk-amd64/

List all versions currently manageable by jenv

jenv versions

global global setting, generally not recommended to change global setting

➜ jenv global

shellSession settings only affect the current shell session

➜ jenv shell

Unset shell session setting

➜ jenv shell --unset

local setting only affects the current folder

➜ jenv local


## Cargo

Cargo is the [Rust](https://www.rust-lang.org/) [*package manager*](https://doc.rust-lang.org/cargo/appendix/glossary.html#package-manager). Cargo downloads dependencies of Rust packages, compiles your packages, creates distributable packages, and uploads them to [crates.io](https://crates.io/)

Installing on Ubuntu is also quite simple:

curl https://sh.rustup.rs -sSf | sh


## Redis

Set up redis server

docker run --name redis-server -p 6379:6379 -d redis:7.2

Install redis client

sudo apt install redis-tools


## Python

Mainly using the pyenv project to manage our Python versions, project address: https://github.com/pyenv/pyenv

For specific usage please refer to the official documentation, here I only briefly record a few points:

Install pyenv

curl https://pyenv.run | bash


Manually edit the .zshrc configuration file and append at the end:

export PYENV_ROOT=“$HOME/.pyenv”
[[ -d $PYENV_ROOT/bin ]] && export PATH=“$PYENV_ROOT/bin:PATH" eval "(pyenv init -)”


Simple pyenv usage:

List installed Python versions

➜ pyenv versions

Check current Python version

➜ pyenv version

List installable versions

➜ pyenv install -l

Install and uninstall pypy3.8-7.3.11

➜ pyenv install pypy3.8-7.3.11
➜ pyenv uninstall pypy3.8-7.3.11


Version switching is indeed convenient, installed versions are all under `~/.pyenv/versions` directory:

global setting (usually not recommended to change global setting)

➜ pyenv global

shell session setting (only affects current shell session)

➜ pyenv shell

unset shell session setting

➜ pyenv shell --unset

local setting (only affects current folder)

➜ pyenv local


The priority hierarchy for pyenv global, local, shell is: shell > local > global

If warnings appear when installing common Python versions via pyenv, manually install common dependencies:

sudo apt install -y
build-essential
libbz2-dev
libssl-dev
libreadline-dev
libsqlite3-dev
zlib1g-dev
libncurses5-dev
libncursesw5-dev
libffi-dev
liblzma-dev
tk-dev
uuid-dev
libgdbm-dev
libgdbm-compat-dev


If root user also needs to use pyenv, you can link the normal user's home `.pyenv` folder configuration with a symbolic link:

sudo ln -s $HOME/.pyenv /root/.pyenv


## Node.js

I personally don't use Node.js much, mainly to run Hexo blog and write knowledge points using Gitbook. Because Node.js versions are rather chaotic, here mainly manage configuration via nvm.

Install nvm

➜ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

Append the following configuration to .zshrc (if exists, no need to duplicate)

export NVM_DIR=“$HOME/.nvm”
[ -s “$NVM_DIR/nvm.sh” ] && . “$NVM_DIR/nvm.sh”
[ -s “$NVM_DIR/bash_completion” ] && . “$NVM_DIR/bash_completion”

Check version info

➜ zsh
➜ nvm --version
0.40.3

Check current node version

➜ nvm version

Install latest stable node

➜ nvm install stable

List all remote available versions

➜ nvm ls-remote

Install specified version

➜ nvm install v18.20.4
➜ nvm install

List all installed versions

➜ nvm ls

Uninstall specified version

➜ nvm uninstall

Switch to specified node version

➜ nvm use

Show current version

➜ nvm current


## MySQL

To avoid interfering with the host environment, it is recommended to use Docker to run MySQL server:

docker run --name mysql -e MYSQL_ROOT_PASSWORD=P@ssw0rd -d -p 3306:3306 mysql:8.0.39-debian


Install mysql client:

sudo apt install mysql-client


## Hexo

A fast, simple, and powerful blogging framework:

Install hexo

npm install hexo-cli -g

Hexo basic commands

➜ hexo clean # Clear cache
➜ hexo g # Generate static files
➜ hexo s # Start Hexo service


## MkDocs

[MkDocs](https://github.com/mkdocs/mkdocs) is an elegant documentation writing tool, very convenient to install using Python:

Install mkdocs

➜ pip install mkdocs

Install material theme

➜ pip install mkdocs-material


## JetBrains

For JetBrains series, just download professional flagship versions from the official website:

Create shortcut for pycharm

sudo ln -s /home/x-x/Documents/Softs/pycharm-2024.2.3/bin/pycharm /usr/local/bin/pycharm

Create shortcut for idea

sudo ln -s /home/x-x/Documents/Softs/idea-IU-242.23339.11/bin/idea /usr/local/bin/idea


Then create menu application icons ourselves:

![](upload://4E7qn9gymy9AUXjvJlHICDlxwQI.jpeg)

As a security professional, there's really no need to look for pirated cracked resources online. We can use fingerprints from legit servers to find many official servers online:

![](upload://kwrYBsYv5E41FqVpoBhOsHeqai8.png)

Just activate directly:

![](upload://ohLaiwXijSCbGypwfLknq3RbZCh.png)

# Security Environment

Due to limited time and energy, this section only lists some typical security tools, which can be gradually improved and built into your own security system during work and practice.

## Host Discovery

Install nmap and ncat

sudo apt install nmap ncat

Install faster scanner masscan

sudo apt install masscan

Use ARP protocol to discover IPv4 hosts on local network and fingerprint them

sudo apt install arp-scan
➜ arp-scan --localnet
Interface: en0, type: EN10MB, MAC: c8:89:f3:b3:24:1d, IPv4: 10.1.1.180
Starting arp-scan 1.10.0 with 256 hosts (GitHub - royhills/arp-scan: The ARP Scanner)
10.1.1.1 00:0c:29:7c:19:2f VMware, Inc.
10.1.1.10 a0:36:9f:89:ad:30 Intel Corporate
10.1.1.11 00:0c:29:b1:fa:11 VMware, Inc.
10.1.1.100 00:11:32:fa:6e:7c Synology Incorporated
10.1.1.218 a8:a1:59:9f:57:aa ASRock Incorporation
10.1.1.128 ec:4d:3e:86:cb:2e Beijing Xiaomi Mobile Software Co., Ltd
10.1.1.199 78:11:dc:7d:d5:9a XIAOMI Electronics,CO.,LTD

Fast and efficient port scanner written in Go

➜ brew install naabu


## SQL Injection

sqlmap is sufficient

sudo apt install sqlmap


## Directory Scanning

dirsearch is sufficient

sudo apt install dirsearch


If running directly causes an error:

➜ dirsearch
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See Package Discovery and Resource Access using pkg_resources - setuptools 80.9.0 documentation
from pkg_resources import DistributionNotFound, VersionConflict
URL target is missing, try using -u


This is because of conflict with the Ubuntu builtin Python. Don't worry, we can globally switch Python version via pyenv:

pyenv global 3.8.8


## File Analysis

binwalk, a CTF MISC tool

sudo apt install binwalk


## Mobile Security

Install adb

sudo apt install android-platform-tools-base


## Password Cracking

Password cracking utility

sudo apt install hashcat

Classic UNIX password cracking tool

sudo apt install john

Essential WiFi security tool

sudo apt install aircrack-ng


## Traffic Analysis

wireshark, essential for blue team forensics

sudo apt install wireshark


Wireshark under Wayland protocol using KDE global menu plugin shows menu abnormally. Make it run under x11 mode manually by adding the following environment variables:

QT_QPA_PLATFORM=xcb GTK_IM_MODULE=fcitx SDL_IM_MODULE=fcitx QT_IM_MODULE=fcitx


This makes Wireshark work normally.

## Audio Analysis

Audacity is a classic audio analysis software, can be installed via system's Discover store. If it doesn't open after installation, try switching the source and try again:

![](upload://uyR8AYaCtf71GuHZP722dPl4NOH.png)

Proof of successful running screenshot:

![](upload://bp3drqSrZIci8OLyEqtogTq57by.png)

## Compression Analysis

We can directly install ARCHPR, a classic archive cracking tool, from the Spark Store:

![](upload://ohlBPRcF1FsbIg4T0s8gofF3eq2.jpeg)

Currently works well under Wine environment:

![](upload://dBjVnI0jwhznSfcW41Va6GJ5DZh.png)

## JADX

[JADX](https://github.com/skylot/jadx) can easily analyze Jar and Android APK. After installing Java, you can open it directly:

![](upload://v4DxjlhwV3dUSNT1DaVcQiws5H1.jpeg)

Let's manually create a shortcut for JADX for easier next opening:

![](upload://eO7i73LR1vRbNIrabNknV7xFLXF.jpeg)

## Yakit

[Yakit](https://github.com/yaklang/yakit) is indeed a pretty good domestic security software worth trying. Linux installation is quite simple, just download the packaged AppImage from [Release](https://github.com/yaklang/yakit/releases).

![](upload://iRhYuAaQUp8jcDMDF5Frs2UjrP4.jpeg)

It currently works well on Linux:

![](upload://9wcISqZo7Lsnz57f2dsZcp4m3E6.png)

## Goby

[Goby](https://gobysec.net/) is also a nice domestic scanner, works smoothly on Linux:

![](upload://v8uWxiOzbD3FbGn8wzvOOyNG9MX.png)

Just install via official script:

curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall &&
chmod 755 msfinstall &&
./msfinstall


First run requires initialization:

➜ msfconsole

** Welcome to Metasploit Framework Initial Setup **
Please answer a few questions to get started.

Would you like to use and setup a new database (recommended)? y


![](upload://hdF7bPyMiRU1D6Z2AARswvPGzGn.png)

It seems not many domestic users play Metasploit Pro. Here's some related [resources](https://www.sqlsec.com/download/Metasploit_Pro+Crack_Ubuntu_Debian.zip) packaged by me for self-use. After installation, manually run some cracking scripts in Creak:

![](upload://AvdcquV3l4Yb1LkCL9FQDkXQ60c.jpeg)

Since this Pro starts somewhat slowly, make sure the related services run normally after each boot:

sudo systemctl list-units --type=service --all|grep metasploit


![](upload://7FZxUHPz6rxJ7FF4mmUiIY6zP8a.png)

Then visit in browser:

https://127.0.0.1:3790/


Set up user info on first use. It's a bit complicated, so make sure to remember it well:

![](upload://VMps8R2oLWiWagnn4osI1wJ6Lx.png)

It's basically a graphical MSF interface; the official provides some automated scanning functions:

![](upload://cxU8sfvqv6yZyV7mE0bP02sOgm7.jpeg)

Of course, Metasploit Pro also comes with msfconsole. Comparing them, Pro indeed has many additional auxiliary testing modules:

![](upload://gc5b74z8cODxZlvzEomBXP4UIya.png)

## Burp Suite

First download the latest Pro installer from [BP official website](https://portswigger.net/burp/releases):

![](upload://c0wnodL0HjNvfOFnSHeJMDjgzYv.png)

chmod +x burpsuite_pro_linux_v2024_8_1.sh
./burpsuite_pro_linux_v2024_8_1.sh


Just accept all defaults and install:

![](upload://y7Kv3o0A0WyVPfkLn54qSBJ9MpZ.png)

If it is the GUI version, you can install all in default paths first:

![](upload://2TvO1bJnO1J0GSKKaqDc5rFxR9B.jpeg)

Download the latest [keygen](https://github.com/h3110w0r1d-y/BurpLoaderKeygen) and copy to BP installation directory:

mv BurpLoaderKeygen_v1.17.jar ~/BurpSuitePro


Run the keygen directly:

~/BurpSuitePro/jre/bin/java -jar ~/BurpSuitePro/BurpLoaderKeygen_v1.17.jar


Click `Run`, enter the license, and then select **Manual Activation**:

![](upload://decuXhKaSiJn0GGqKUd2IcWZgiD.jpeg)

For convenience of future use, directly modify `~/BurpSuitePro/BurpSuitePro.vmoptions` by adding the following parameters:

–add-opens=java.base/java.lang=ALL-UNNAMED
–add-opens=java.base/java.lang=ALL-UNNAMED
–add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
–add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
–add-opens=java.base/jdk.internal.org.objectweb.asm.Opcodes=ALL-UNNAMED
-javaagent:BurpLoaderKeygen_v1.17.jar
-noverify


# Software Resources

## Teach a Man to Fish

### Discover

`Discover` is the graphical software management tool for the KDE Plasma desktop environment, supporting multiple software package formats and sources, including Snap packages. For the first use, it is recommended to also install the Flatpak package backend, so that we can later use Discover to search, install, and manage applications from Flatpak sources (such as Flathub).

![](upload://7NddRLJFrZwc43nvoVoUPacWOvL.png)

When using Discover for the first time to install some resources like snap, there may be issues with garbled Chinese characters:

![](upload://lgvVi8z4PwpA6iouiBVyRwkn3mD.png)

Restarting some applications will fix the garbled characters, but a few applications may still have this problem. Overall, the KDE built-in Discover software center is indeed not very suitable for Chinese users.

### Kylin Resources

Domestic promotion and popularization of trusted computing (Xinchao) systems is vigorous, so we can also freely get commonly used software packaged by the Kylin system, simply download the corresponding deb packages and install them.

Download address for resources: https://software.openkylin.top/openkylin/yangtze/pool/all/

This method was shared by the commenter **like**:

![](upload://9AwzmGDsjIQM3RJWXboNMsbH0V4.png)

### Spark Store

The Spark App Store is built domestically, designed specifically for Linux users, aiming to solve the Linux ecosystem's problem of scattered and hard-to-get applications.

Official website: https://www.spark-app.store/

Installation method: download the latest deb package from the official project's [release page](https://gitee.com/spark-store-project/spark-store/releases) and install it with:

sudo gdebi spark-store_4.3.0-fix5.1_amd64.deb


![](upload://3rxdDSKgxjIQ688oCdh1korPjlH.jpeg)

## System Enhancements

### Application Overview

| Software Name               | Installation Method | Description                   |
| --------------------------- | ------------------- | ----------------------------- |
| PCManFM-Qt File Manager     | Discover Store      | A simpler file manager        |
| Files                       | Discover Store      | Another minimalist file manager |
| Piper                       | Discover Store      | Mouse side button customization |
| Nautilus scripts manager    | Discover Store      | Default GNOME file manager     |

## Download Tools

| Software Name    | Installation Method                                 | Description                  |
| ---------------- | ------------------------------------------------- | ---------------------------- |
| Motrix           | [Spark Store](https://spk//store/network/motrix) | A good multi-threaded downloader |
| Thunder          | [Kylin Resources](https://software.openkylin.top/openkylin/yangtze/pool/all/) | Minimalist version of Thunder downloader |
| Aliyun Drive     | [Spark Store](https://spk//store/network/com.aliyundrive.spark) | Works well under Wine environment |
| Baidu Netdisk    | [Spark Store](https://spk//store/network/baidunetdisk) | Official Baidu Cloud client for Linux surprisingly available |
| Tianyi Cloud     | [Spark Store](https://spk//store/network/com.cloud.21cn) | The third-tier cloud storage also has a Linux client |
| Quark Netdisk   | [Spark Store](https://spk//store/network/cn.quarkclouddrive.spark) | Currently a decent domestic cloud storage experience |
| Lanzou Cloud     | [Spark Store](https://spk//store/network/com.lanzou.spark) | Seems not very profitable, could shut down anytime |

## Browsers

### Application Overview

| Browser Name     | Installation Method                                | Description                         |
| ---------------- | ------------------------------------------------ | ---------------------------------- |
| Chromium         | [Spark Store](https://spk//store/network/chromium-linux)     | Open-source version of Chrome        |
| Google Chrome    | [Spark Store](https://spk//store/network/google-chrome-stable) | Always top-tier in browsers         |
| Microsoft Edge   | [Spark Store](https://spk//store/network/microsoft-edge-stable) | Edge browser has developed well recently |
| Vivaldi          | [Spark Store](https://spk//store/network/vivaldi-stable)      | A rather personalized Chromium-based browser |
| Yandex Browser   | [Official Download](https://browser.yandex.com/)              | Russian browser, also Chromium-based |
| Deepin Browser   | [Spark Store](https://spk//store/network/org.deepin.browser)  | Deepin browser based on Linglong app repackaging |
| Tor Browser      | [Spark Store](https://spk//store/network/org.torbrowser.spark) | Essential for dark web threat intelligence |

### Experience Optimization

The built-in FireFox browser works perfectly under KDE's Wayland mode, supports two-finger pinch zoom and Chinese input method, but Chrome and Edge still require some configuration.

* **FireFox**

The pre-installed Firefox conflicts with our theme style, so we need to customize the appearance:

git clone GitHub - vinceliuice/WhiteSur-firefox-theme: Mac OS Safari theme for Firefox on Linux
cd WhiteSur-firefox-theme
./install.sh


![](upload://o2Y7ZIYhzh51X5kMIbrlvxN7mbl.jpeg)

* **Google Chrome**

cat /usr/share/applications/google-chrome.desktop|grep Exec
Exec=/usr/bin/google-chrome-stable --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime %U
Exec=/usr/bin/google-chrome-stable --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime
Exec=/usr/bin/google-chrome-stable --incognito --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime


* **Chromium**

cat /usr/share/applications/chromium-linux.desktop |grep Exec

Exec=/usr/bin/chromium-linux --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime %U


* **Microsoft Edge**

cat /usr/share/applications/microsoft-edge.desktop| grep Exec
Exec=/usr/bin/microsoft-edge-stable --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime %U
Exec=/usr/bin/microsoft-edge-stable --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime
Exec=/usr/bin/microsoft-edge-stable --inprivate --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime


* **Yandex Browser**

cat /usr/share/applications/yandex-browser.desktop| grep Exec
Exec=/usr/bin/yandex-browser-beta --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime %U
Exec=/usr/bin/yandex-browser-beta --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime
Exec=/usr/bin/yandex-browser-beta --incognito --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime


* **Vivaldi Browser**

cat /usr/share/applications/vivaldi-stable.desktop| grep Exec
Exec=/usr/bin/vivaldi-stable --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime %U
Exec=/usr/bin/vivaldi-stable --new-window --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime
Exec=/usr/bin/vivaldi-stable --incognito --enable-features=UseOzonePlatform --ozone-platform=wayland --ozone-platform-hint=auto --enable-wayland-ime


## Office & Social

### Application Overview

| Software Name | Installation Method                                | Description                               |
| ------------- | ------------------------------------------------ | ----------------------------------------- |
| QQ            | [Official Download](https://im.qq.com/linuxqq/index.shtml) | Tencent's Linux version of QQ is quite good |
| WeChat        | [Spark Store](https://spk//store/chat/store.spark-app.wechat-linux-spark) | Tencent WeChat now also has a Linux version |
| Feishu        | [Spark Store](https://spk//store/chat/bytedance-feishu-stable) | ByteDance product, works great under Wayland protocol |
| DingTalk      | [Spark Store](https://spk//store/chat/com.alibabainc.dingtalk) | DingTalk also has quite high market share |
| Tencent Meeting | [Spark Store](https://spk//store/chat/wemeet)   | Office software, can live without but not without it |
| Telegram      | Discover Store                                   | Essential for dark web threat intelligence monitoring |

### Experience Optimization

* **WeChat**

If your screen resolution is very high, the Linux WeChat interface is somewhat small. We need to manually add the scaling variable to improve the user experience. The following sets the interface scale to 1.5 times:

QT_SCALE_FACTOR=1.5


Also, Fcitx5's Chinese input was found to be not working properly, so we need to manually edit WeChat's launch icon properties:

sudo vim ~/.local/share/applications/store.spark-app.wechat-linux-spark.desktop


The modified content should be:

Exec=env QT_SCALE_FACTOR=1.5 GTK_IM_MODULE=“fcitx” QT_IM_MODULE=“fcitx” SDL_IM_MODULE=“fcitx” /opt/apps/store.spark-app.wechat-linux-spark/files/launch.sh


This way, our WeChat usage experience is basically no different from that on Windows.

* **Tencent Meeting**

Tencent Meeting refuses to open under the Wayland protocol and pops up a warning:

![](upload://qbJkvxur6ljmDoLibNCrbzDPjgX.png)

Edit Tencent Meeting's launch script:

sudo vim /opt/wemeet/wemeetapp.sh


Manually locate the conditional statement checking the Wayland protocol, and above it add the following lines to force the application to use the X11 display protocol:

export XDG_SESSION_TYPE=x11
export QT_QPA_PLATFORM=xcb
unset WAYLAND_DISPLAY


![](upload://gQ9x5klaJDS1vHPuX2wb3wItjvy.png)

Similarly, Tencent Meeting on high-resolution screens is also small and does not support Chinese input. We manually adjust the scaling by adding the following environment variables:

QT_SCALE_FACTOR=1.5 GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx SDL_IM_MODULE=fcitx


![](upload://poG2g7yzDqoKLgL37AyV2itmpbV.jpeg)

However, due to Wayland security issues under X11 working environment, Tencent Video currently cannot capture shared screens. So if you really need to share screens with Tencent Video, it’s better to use a virtual machine, or try the very powerful Feishu instead!

## Document & Office

### Application Overview

| Software Name | Installation Method               | Description                        |
| ------------- | -------------------------------- | ---------------------------------- |
| Typora        | [Official Download](https://typora.io/#linux) | Typora is GuoGuang's main tool for writing Markdown |
| WPS Office    | [Spark Store](https://spk//store/office/wps-office) | WPS Office is quite clean and smooth on Linux |

### Experience Optimization

* **Typora**

As mentioned before, Typora has issues with Chinese input under Wayland. We can manually add the following environment variables:

GTK_IM_MODULE=fcitx SDL_IM_MODULE=fcitx QT_IM_MODULE=fcitx


* **WPS Office**

WPS Office shows missing fonts:

![](upload://karihoBgOALO4OHDdgZcFiHOUpI.png)

We can download fonts from this project: https://github.com/dv-anomaly/ttf-wps-fonts and find these ttf fonts, then right-click and select [Install].

Similarly, WPS's Chinese input also has issues. We manually add the following environment variables: 

GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx SDL_IM_MODULE=fcitx


![](upload://2Qeeb5AeOaE7GXa08CQ28DgZMK3.png)

## Productivity

### Application Overview

|Software Name|Installation Method|Description|
| --- | --- | --- |
|Planify|[Flathub](https://flathub.org/apps/io.github.alainm23.planify)|Minimalist and visually appealing todolist|
|Super Productivity|[Official Project](https://github.com/johannesjo/super-productivity)|Similar to Windows To Do|

## Code Development

### Application Overview

|Software Name|Installation Method|Description|
| --- | --- | --- |
|Visual Studio Code|[Official Download](https://code.visualstudio.com/docs/?dv=linux64_deb)|Possibly the most powerful code editor currently|
|Sublime Text|[Official Download](https://www.sublimetext.com/download)|Lightweight code editor|
|PyCharm|[Official Download](https://www.jetbrains.com/pycharm/download/?section=linux)|A real integrated development environment (IDE)|
|IDEA|[Official Download](https://www.jetbrains.com/zh-cn/idea/download/?section=linux)|A real integrated development environment (IDE)|
|Navicat Premium Lite|[Official Download](https://www.navicat.com.cn/download/navicat-premium-lite)|Navicat's official free version, sufficient for most needs|
|Tiny RDM|[Official Download](https://redis.tinycraft.cc/)|Open-source and visually appealing Redis client|

### Experience Optimization

* **Visual Studio Code**

Visual Studio Code has issues with Chinese input; we can manually add the following environment variables:

GTK_IM_MODULE=fcitx SDL_IM_MODULE=fcitx QT_IM_MODULE=fcitx


* **Sublime Text**

The default Sublime Text 4180 is a trial version, but we can easily crack it. Locate the executable path as:

/opt/sublime_text/sublime_text


Use the online website, [https://hexed.it](https://hexed.it/), open the file, select the sublime_text executable from the previous step, and in the search bar enter

80 79 05 00 0F 94 C2


Replace with:

C6 41 05 01 B2 00 90


![](upload://wlX3Wouc4QarhJ8uWFdZJJucAbN.png)

Re-export and replace the original sublime_text to successfully crack:

![](upload://tOT8TQouOHzvKpCwJWcfgMuAnfQ.png)

Here is the cracked sublime_text file for version 4180: [sublime_text](https://www.sqlsec.com/download/sublime_text)

If you are using Sublime Text with the global menu plugin under KDE5, the title will not display properly. This is due to it working under the Wayland protocol. This BUG probably won't be fixed in the current KDE5 version, so we can manually specify the x11 environment variable:

GDK_BACKEND=x11 GTK_IM_MODULE=fcitx SDL_IM_MODULE=fcitx QT_IM_MODULE=fcitx


Also remember to disable Sublime's auto-update:

![](upload://sgwgtJCy6Id24rj1UubouLwwkCr.jpeg)

## Virtual Remote

### Application Overview

|Software Name|Installation Method|Description|
| --- | --- | --- |
|KRDC|Built-in KDE|KDE’s built-in RDP remote client, but requires manual optimization|
|Remmina|[Official Installation](https://remmina.org/how-to-install-remmina/#ubuntu)|Remmina is currently among the top-tier Linux remote tools|
|VirtualBox|[Official Installation](https://www.virtualbox.org/wiki/Linux_Downloads)|Open-source and free virtualization solution on Linux|
|Docker Desktop|[Official Installation](https://docs.docker.com/desktop/install/linux/ubuntu/)|Graphical Docker container management|
|Terminus|[Official Download](https://termius.com/download/linux)|A very visually appealing remote tool|
|MobaXterm (Wine)|[Spark Store](https://spk//store/development/net.mobatek.mobaxterm)|Popular remote tool on Windows|
|Tabby|[Spark Store](https://spk//store/development/tabby-terminal)|Open-source visually appealing terminal|

### Experience Optimization

* **KRDC**

By default, KRDC does not work properly under the Wayland display protocol. The latest KRDC may have fixed this issue, but our Kubuntu 24.04 KDE5 KRDC version is too old:

![](upload://6RKlOoh77TOtF2cUYdxEUkr2pJf.png)

But we can edit the application and force KRDC to run using the X11 protocol:

![](upload://6B42RjtFLPEBg9vf2vrLxhj6KsB.png)

XDG_SESSION_TYPE=x11 QT_QPA_PLATFORM=xcb


This allows KRDC to work normally:

![](upload://bwWK8cND97J708mWzVLXFxNfnfy.jpeg)

* **Remmina**

Ubuntu 24.04’s default Remmina version is not very new, so the interface is not in Chinese initially. According to the official documentation, you can manually add the ppa repository and install the latest Remmina version to get the Chinese interface:

sudo apt-add-repository ppa:remmina-ppa-team/remmina-next
sudo apt update
sudo apt install remmina remmina-plugin-rdp remmina-plugin-secret


## Media Design

### Application Overview

|Software Name|Installation Method|Description|
| --- | --- | --- |
|ImageMagick|Discover Store|ImageMagick is a classic image processing tool on Linux|
|Gimp|[Spark Store](https://spk//store/image_graphics/gimp-spark)|GIMP is a powerful image editing software|
|Adobe PhotoShop CS6|[Spark Store](https://spk//store/image_graphics/com.photoshopcs6.deepin)|Although this PhotoShop is a bit old, it’s still usable|
|Image Viewer|Discover Store|Supports viewing and exporting macOS ICNS format icons directly|

### Experience Optimization

* **Activate PhotoShop**

1. Back up the default amtlib.dll file located at ~/.deepinwine/Deepin-CS6/drive_c/Program Files/Adobe/Adobe Photoshop CS6/amtlib.dll  
2. Download the [amtlib.dll file with registration info](https://storage.deepin.org/thread/20230808113052649_amtlib.dll%EF%BC%88PS-CS6%E6%BF%80%E6%B4%BB%E6%9B%BF%E6%8D%A2%E6%96%87%E4%BB%B6%EF%BC%89.zip?_gl=1*naabbj*_ga*MTAyNTQ2ODcyNS4xNzI3OTQwNjEw*_ga_QHZ7DPPD2D*MTcyNzk0MDYxMC4xLjAuMTcyNzk0MDYxMC4wLjAuMA..) and replace the above directory file to complete the crack and activation.

![](upload://thFzlQGMK3k6BQFqIrbqOtGkNu7.png)

## Audio & Video Entertainment

### Application Overview

|Software Name|Installation Method|Description|
| --- | --- | --- |
|Steam|[Spark Store](https://spk//store/games/steam-launcher)|There are still quite a few Linux games on Steam|
|NetEase Cloud Music|[Spark Store](https://spk//store/music/netease-cloud-music)|The Spark Store version is easy to install, but daily recommendations don’t work properly|
|YesPlayMusic|[Official Project](https://github.com/qier222/YesPlayMusic/releases)|Highly visually appealing third-party NetEase Cloud Music player|
|PotPlayer|[Spark Store](https://spk//store/video/org.potplayer.spark)|Excellent video player ported from Windows|
|VLC Media Player|`apt install vlc`|Classic open-source media player|
|MPV Media Player|`apt install mpv`|Minimalist and powerful media player on Linux|
|OBS Studio|`apt install obs-studio`|Very powerful live streaming and video recording professional software|

### Experience Optimization

* **NetEase Cloud Music image-20241011163009383**

If your screen resolution is very high, the Linux version of NetEase Cloud Music interface might appear a bit small. We need to manually add a scaling environment variable to optimize the user experience. Below shows scaling the interface 1.5 times:

QT_SCALE_FACTOR=1.5


Find the application menu, edit NetEase Cloud Music’s launcher, and add the above environment variable manually.

Since NetEase Cloud does not maintain the Linux official client, theoretically password login cannot work properly. However, scan code login is supported; aside from personalized recommendations not working properly, other features seem to work normally:

![](upload://3BsGL4a384f9lPZp7LThtwQS21t.jpeg)