manjaro + kde 使用过程中问题记录及解决方法

前言:使用manjaro的经历:2020/11月中旬时,我被自己很差的电脑搞得心态爆炸,开机要5分钟,只是开个pycharm编辑器+网页电脑就开始卡屏,于是就决定购买新电脑。在新电脑还没到货的情况下,想给旧电脑做做好玩的事情,刚好今年我们上linux实验课,同时有了解到manjaro这个linux发行版,所以我给自己的旧电脑安装了manjaro+kde;这次操作系统更换着实给了我惊喜,原来使用win10那么卡慢的电脑,在这个新操作系统下有明显的流畅提升,至少同时开6个应用程序也比原来开2个要快,并且kde这个精美可定制的桌面环境我也很喜欢。于是我入坑了manjaro,希望自己在使用这个操作系统的过程中同时学好linux。

但是,我还是个linux菜鸟,在使用过程中会遇到各种各样的问题。于是我决定把这些问题和解决方法记录下来,一来方便我将来再出现同样的问题可以快速查看,二来帮助同样在使用manjaro的人们。

vscode中C++多文件编译

问题:在vscode中,在默认情况下,按F5后只能编译当前文件,无法编译多个文件。
解决:举个例子

在~/code/C++/learn中新建的一下3个文件

//main.cpp
#include "a.h"
#include <iostream>

int  main(){
	func();
	std::cout << 'a' << std::endl;
	return 0;
}
//a.cpp
#include <iostream>
#include "a.h"

void func(){
    std::cout << "Hello World!" << std::endl; 
}

//a.h
#ifndef _A_H_
#define _A_H_

extern void func();

#endif

如果我们在某一个文件按F5就会出错,那该怎么办了,我们需要编写Makefile文件,launch.json文件,task.json文件。

Makefile

src = main.cpp a.cpp
learn: $(src) a.h
	g++ -g $(src) -o learn
clean:
	rm learn 

tasks.json

{
    "tasks": [
        {
            "type": "shell",
            "label": "make build active file",
            "command": "/usr/bin/make",
            "args": [
                "-C",
                "${workspaceFolder}"
            ]
        }
    ],
    "version": "2.0.0"
}

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${workspaceRootFolderName}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make build active file",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

json文件放入~/code/C++/learn/.vscode中

这时候你在点击F5就会进入调试。

ok,这就完成了吗,当然不是,上面的json文件是通用的,但是Makefile不是,不同的项目编写的内容不同,并且对于复杂的项目,Makefile的编写很麻烦,甚至你可能写不出来;众所周知,人是懒惰的, 有人就发明了qmake来自动生产Makefile。

下面来介绍qmake的使用:

qmake安装 (qmake是Qt自带的)
先进入程序目录:

然后输入

你会发现生成了 文件夹名.pro 文件

最后输入

你会发现生成了 Makefile文件

然后和上面介绍的操作即可(就是写好两个json文件)

vscode中Qt的配置

问题:如何在vs中使用Qt呢?
解决:
首先安装好Qt

查看自己qt库在哪里,一般在/usr/include/qt中

在~/code/C++/test中创建3个文件
main.cpp

#include <QApplication>
#include "dialog.h"

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);

  Dialog dialog;
  dialog.show();

  return a.exec();
}

dialog.h

#ifndef _MAIN_DIALOG_
#define _MAIN_DIALOG_

#include <QDialog>
#include <QLabel>



class Dialog : public QDialog
{
  Q_OBJECT

public:
  Dialog(QWidget *parent = 0);
  ~Dialog();

private:
  QLabel *label_test;
};

#endif

dialog.cpp

#include <QtWidgets>
#include "dialog.h"

Dialog::Dialog(QWidget *parent) : QDialog(parent)
{
  this->setWindowTitle("hello");

  label_test = new QLabel(this);
  label_test->setText("HelloWorld");

  QGridLayout *main_layout = new QGridLayout(this);
  main_layout->addWidget(label_test, 0, 0);
}

Dialog::~Dialog()
{
}

编写c_cpp_properties.json, launch.json, task.json文件,后两个文件和前面内容一致。

c_cpp_properties.json

{
    "configurations": [
        {
            "name": "gcc-64",
            "intelliSenseMode": "gcc-x64",
            "includePath": [
                "/usr/include/qt",
                "/usr/include/qt/QtCore",
                "/usr/include/qt/QtGui",
                "/usr/include/qt/QtWidgets",
                "${workspaceRoot}"
            ],
            "browse":{
                "path":[
                    "/usr/include/qt",
                    "/usr/include/qt/QtCore",
                    "/usr/include/qt/QtGui",
                    "/usr/include/qt/QtWidgets",
                    "${workspaceRoot}"
                ]
            },
            "compilerPath": "/usr/bin/g++",
            "cStandard": "c11",
            "cppStandard": "c++17"
        }
    ],
    "version": 4
}

其中"includePath"和"path”内容一致,为qt库所在位置。

编写完成后目录内容为:

然后输入qmake -project
你会发现生成了test.pro文件,我们要修改这个文件,在第一行添加

QT += gui core widgets

然后输入qmake
你会发现生成了Makefile文件
最后在vscode按F5就可以运行。

linux中程序的打包发布(这里以打包QT程序为例)

首先,运行程序得到了parse这个可执行程序,将这个程序xxx放置与新文件夹~/qwer中;

接着向~/qwer文件夹中添加pack.sh和parse.sh这两个脚本,脚本内容具体如下:

pack.sh

#!/bin/sh  
exe="parse" #你需要发布的程序名称
des="/home/shuojia/qwer" #创建文件夹的位置
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des

其中注意exe=“parse”,等号右边具体的内容由你的执行文件名字决定。

parse.sh

#!/bin/sh  
appname=`basename $0 | sed s,\.sh$,,`  
dirname=`dirname $0`  
tmp="${dirname#?}"  
if [ "${dirname%$tmp}" != "/" ]; then  
dirname=$PWD/$dirname  
fi  
LD_LIBRARY_PATH=$dirname  
export LD_LIBRARY_PATH  
$dirname/$appname "$@"

该文件的命名也由可执行文件决定,即 可执行文件名.sh

然后执行pack.sh脚本,他就会把运行该程序所需要的所有依赖放入~/qwer文件夹中。

最后你就可以把这个文件夹打包发送给其他人来运行了

root权限的获取和退出

获取root权限

(1)输入命令su

(2)在输入正确的密码

退出root权限

输入命令exit

pip安装时速度过慢问题

pip安装库文件时,默认使用国外的源,由于国内原因,速度当然不快,
好在国内提供了各种镜像。

(1)阿里云http://mirrors.aliyun.com/pypi/simple/

(2)豆瓣http://pypi.douban.com/simple/

(3)清华大学https://pypi.tuna.tsinghua.edu.cn/simple/

(4)中国科学技术大学http://pypi.mirrors.ustc.edu.cn/simple/

(5)华中科技大学http://pypi.hustunique.com/

下面用一个例子展示对国内源的使用

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ jieba

移动文件

移动多个文件

mv [-fiu] source destination
-f: force强制新移动,会覆盖同名文件
-i: 遇到同名文件会询问
-u: 遇到同名文件会查看新旧,若源文件更新,则更新
例子:
移动/usr/file文件到/bin中并以file2命名

mv -f /usr/file /bin/file2

移动/usr/file文件到/bin目录下

mv -f /usr/file /bin

同时移动多个文件到制定目录下

mv source1, source2,... director
例子:

mv file1, file2, file3 /usr

杀死进程

问题:linux的wps有个bug,在复制公式的时候wps会卡住,无法通过图像操作关掉
解决:
(1)输入top命令在查看当前正在运行的进程

这里我们注意进程号和commad(执行程序的名称)这两个部分,比如进程号8084对应的commad为net-ease-cloud-m(网易云音乐)
(2)下面通过输入kill -9 进程号就可以杀死该进程,例如,我想关系网易云音乐,就输入kill -9 8084即可

python版本切换

问题:manjaro的包管理只能维护python2和python3各一个版本(一般为最新),但是如果我想要在不同python3版本切换(比如pyhon3.8.6和python3.5.6之间),就没办法实现。
解决:使用pyenv工具

安装步骤

  • 下载(有两种下载方法)
  1. git clone https://github.com/pyenv/pyenv ~/.pyenv
  2. sudo pacman -S pyenv
    推荐使用第二种
  • 环境配置
    分别输入以下命令
echo 'export PATH=~/.pyenv/bin:$PATH' >> ~/.bashrc
echo 'export PYENV_ROOT=~/.pyenv' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

需要注意的是,如果你不是使用bash作为默认shell,.bashrc需要替换。比如我使用zsh,所以需要替换为.zshrc

  • 激活
    输入下面的命令source ~/.bashrc,同理,.bashrc也需要根据的默认shell来替换
  • 安装python
    输入命令pyenv install --list来查看可以安装的python版本
    输入命令pyenv install 版本号就可以安装python,如pyenv install 3.6.4
  • 卸载python
    输入命令pyenv uninstall 版本号即可
  • 选择python版本
    在某一个目录下输入命令pyenv local 版本号,就可以指定当前目录下的python版本,如果你想使用系统自带的版本的话,可以输入pyenv local system

使用总结

一般情况下使用设置pyenv local system使用系统自带的python版本(最新版),如果有特殊情况需要使用其他版本,就pyenv install 需要的版本号,再pyenv local 需要的版本号

posted @ 2020-11-28 11:36  爱弹琴的小黑  阅读(1090)  评论(0编辑  收藏  举报