一个人的角落,也许并没人会看到这里~~ 祝福你,工作顺心,学习快乐~

Linux

群晖利用公网服务器ip中转流量与内网无缝切换

最近想起nas的公网访问一直是个问题。中转网络一直不通畅,如果走公网转nas又会过度暴露而被自动扫描攻击,导致硬盘频繁唤醒。

这里实现一套方案,利用公网服务器的ip进行流量转发,并且添加一道简单的防火墙来过滤网络扫描。可以在回家以后自行将流量切换到内网。

在使用公网ip转发的时候,流量和带宽受公网服务器上限所限制。在家中互联场景,本地路由器可以通过拦截公网ip流量,自动转发到nas。免去内外网ip来回切换的问题。

graph TD User1(["User1/Phone/PC"]) -->|Access from local NetWork| B{Router} NAS["NAS lisening:5000(http)/5001(https)"] <-->|In local NetWork| B{Router} Internet{Internet} <--> PubServer[PubServer onPort:80/443/5001] Internet <--> B{Router} User2(["User2/DS File/Photo"]) --> |Access to PubServer:5001| PubServer

主要有以下几个部分实现:

在nas上,将本地端口5000映射到公网ip上,通过 ssh -R 转发。

在计划任务中添加一个bash脚本,建立公网服务器的ssh连接用于端口转发,并设置为开机启动。内容如下:

#!/bin/bash

while true; do
sleep 1
echo "Start Port Forward 5000 @ " `date`
ssh -R 5000:127.0.0.1:5000 yourAccount@YourServer.com -C -q -N -o ServerAliveInterval=60 -o ServerAliveCountMax=10
echo "End of Port Forward 5000 @ " `date`
done;

该脚本启动后会将公网服务器所有来自5000端口的流量转发到nas本身。

5000端口为nas的http服务的连接端口,5001端口为nas的https服务的连接端口。

接下来在公网服务器上配置nginx来实现http流量转发并且配置https端口为5001,通过白名单机制将流量转发到nas。

server {
    server_name yourServerName;
    location / {

#       set $pass_url http://127.0.0.1:8000; # for enter password.
#       if ( $http_user_agent ~ 'Synology-' ) { 
#          // we can also use UA to imp more filters.
           set $pass_url http://127.0.0.1:5000;
#       }
        proxy_pass $pass_url;
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        include <your_list_path>/nas_allow_list.conf;
        deny all;
    }

    location /log {  // 
        set $pass_url http://127.0.0.1:8000; # for enter password
        proxy_pass $pass_url;
        proxy_set_header Host $host:80;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    listen 443 ssl; # managed by Certbot
    listen 5001 ssl; # managed by Certbot
    <the ssh certs config >
}

在上述conf中/log访问点的流量反代到白名单配置程序,可以用于动态更新 nas_allow_list.conf白名单。

一个简单的基于白名单配置程序:

from werkzeug.wrappers import Request, Response
import subprocess

@Request.application
def application(request):
    auth_html = '''<body style="margin: 0;"><div style="margin: auto ; width: 100%; height:100%; border: 2px solid green; padding: 50px 0; text-align: center; "><form  method="POST">
            <input type="password" name="psw" style="line-height: 25px;" value="" required placehold="Enter Text..." />
            <input type="submit" style="width: 90px;height: 30px;" value="Submit" />
        </form></div>'''
    if request.method != "POST":
        return Response(auth_html, content_type="text/html")

    data = request.get_data(cache=False,parse_form_data=True)

    input = request.form.get("psw", None)
    if input != "<Your Pass Word>":
        return Response(auth_html[:-6] + "<red>N/a</red></div>", content_type="text/html")

    iplist = ",".join(request.access_route)
    if request.remote_addr == "127.0.0.1": // the traffic is came from nginx.
        record_addr = request.access_route
    else:
        record_addr = [request.remote_addr]
    for ipaddr in record_addr:
        ipaddr = ''.join(i for i in ipaddr if i in '0123456789.')
        # also we can use firewall to filter te trific
        #cmd = ["firewall-cmd","--zone=sszone","--add-source="+ipaddr+"/32"]
        cmd = ["bash","-c", "echo 'allow "+ipaddr+";'>> <your_list_path>/nas_allow_list.conf"]
        subprocess.check_call(cmd)
        cmd = ["nginx", "-s", "reload"]
        subprocess.check_call(cmd)

    return Response("<h1>You are grand to access, IP<" + iplist + "> has record.<h1>")

if __name__ == "__main__":
    from werkzeug.serving import run_simple
    run_simple("0.0.0.0", 8000, application, threaded=True)

在路由器配置iptables , 将内网client到公网服务器的流量直接转发到local nas:

iptables -t nat -A PREROUTING -d <yourPubServerIP> -p tcp --dport 5001 -j DNAT --to-destination <yourLocalNasIP>:5001

记一次黑群晖系统升级失败之后的数据恢复

最近折腾了一下群晖系统的硬盘休眠, 由于不小心动到了硬盘的RAID设置, 导致系统认定系统盘和数据盘中的系统出现了diverge. 重启之后, 提示需要重装安装系统, 重装失败后系统丢失.

群晖系统要求的重装安装时,操作界面给出了两个选项: 迁移和重新安装.

群晖崩溃出现的安装界面

虽然都提示数据不会改动, 因此没有太在意细节 . 而不小心点到了重新安装, 并且选到了自动更新,(没有手动从官网下载安装包), 没想到安装包没自动下载成功, 直接就安装失败了. 当时也没管,直接强制断电关机睡觉了(这也许是最好的保护软件损毁数据的方法), (原本只需抹去并从启动盘中重新sync一份系统到数据盘, 现在事情弄复杂了.)

第二天起来,发现惊奇的是, 群晖已经将所有系统整个/dev/dm0格式化了.. 格式化这种敏感的操作, 居然不是放在最后等必要条件准备就绪才做. 这波操作让人着迷, 恐怕只有印度小伙能干出来.

Linux数据救援不同于win平台使用PE, 搜寻了一蕃LiveCD的解决方案, systemrescue(https://www.system-rescue.org/) 看起来可以不错,后续使用过程中也都满足了需求,.

基本的disk io操作工具都有,包括testdisk, photorec, parted, mdadm, cifs.

注意: Ubuntu的server版liveCD似乎由于内核没有编译RAID模块, 无法操作raid分区, 已踩坑,不建议用作数据救援.

歌华链路由器刷机历程

一入恩山深似海,从此节操是路人。。。

本文纯属闲扯,用到的方法恩山都有,但没有一个路径完全整合的方法,这里记录一下。

实验室的路由器一直用的还是大一买的,当时为便宜走奶茶家一次性买了俩,想着学校小水管D-Link内置天线就够用了,79包邮到一食堂门口。签收完,发现系统着实垃圾,但能用稳定还凑合,接有线一用就是四五年,直到现在9102年了都。

一直用的都是2.4Ghz频段的无线,因为宿舍区墙多隔离效果也好,实际对上网络要求不高,延迟要求不高的应用来讲,2.4Ghz频段的干扰也不大,不像商场比较开旷的地区,对普通应用体验来讲也是感觉不到干扰的。实际上干扰是存在的,主要表现为,当附近有2.4Ghz的大数据量传输时,其它设备会有严重丢包和Ping值变高的影响。

Linux下的日志自动打包分割工具

在VPS上经常需要跑一些程序或脚本,自然会产生出很多日志。 但要是单单为一个几十行代码的程序去加一个日志管理的功能也显得臃肿。

造轮子是不可能造轮子的。

于是,又查了一遍system log相关的内容,有rsyslogd等等, 但不方便使用,而且是系统级别的。 后来发现像nginx,httpd,等等都是有通过一个名为logrotate的工具,自动对日志文件进行整理。

man logrotate

写得有些不知所云,英语是个二把刀。 花了几些时间整理一下用法。 程序功能比较简单,配置文件(/etc/logrotate.d/*)的参数有两大方面:

  • 一是控制日志整理周期,保存方式等等。
  • 二是对原程序的输出做接管,处理(通过kill发送信号量)。

日志输出程序只需输出日志到指定位置既可,其它所有对日志的整理操作由logrotate来完成。


未完,待续。

Ubuntu下如何切换Intel和Nvidia显卡

原文:How To Switch Between Intel and Nvidia Graphics Card on Ubuntu

翻译水平有限,还望批评指正,都㚏2020s了,有关解决方案大家还是自行Google吧。

在笔记本上如何查看核显和N卡是折腾显卡的第一步。这篇文章展示在Ubuntu理如何和谐的切换Intel核显和N卡。

你应该使用哪块显卡?

对于游戏和3D绘图等要求大量图形计算来说,应该切换至N卡。

如果你对游戏和3D绘图不感觉兴趣,那么,Intlel核显将满足你的日常使用,并且比起N卡更省电。

#1 查看电脑上哪些显卡

在Ubuntu下可以非常简单的做这个事:

lspci -k | grep -E -A2 -i 'VGA|3D'

https://www.linuxbabe.com/wp-content/uploads/2016/04/Selection_010-1.png

#2 查看正在使用哪块显卡

Ubuntu 默认会使用Intel核显。

如果你以前对显卡驱动做过改动,又不记得了,那么可以在图形界面下,系统设置 > 细节system settings > details)中查看。

#3 安装Nvidia显卡驱动

Ubuntu本身集成了N卡开源驱动nouveau在Linux内核里,但此驱动缺少3D加速的支持. 要发挥显卡性能,我们可以用software-properties-gtk程序去安装合适的驱动。

Software & Updates_ additional drivers

你可以选择最新的版本,应用更改。

也可以通过下列命令,查看推荐的驱动版本:

 sudo ubuntu-drivers devices

How To Switch Between Intel and Nvidia Graphics Card on Ubuntu

下列命令将会自动安装Nvidia驱动。

sudo ubuntu-drivers autoinstall

在合适的驱动安装成功后,重新打开系统设置 > 细节system settings > details),你将会看到新安装的驱动已经选择上了,如果没有的话,请自行选择,并应用修改。

https://www.linuxbabe.com/wp-content/uploads/2016/04/Software-Updates_013.png

现在我们已经安装好了合适的N卡驱动了,但是,我们仍然在使用Intel核显。

#4 切换到N卡

在你选择好了N卡驱动后,可能需要重启你的电脑,以启用PRIME支持。如果PRIME没有启动,可能会出现下面的信息:

Message: PRIME: is it supported? no

重启之后,可以从应用列表中打开Nvidia X Server Settings,或者从命令行打开:

#: nvidia-settings

NVIDIA X Server Settings_ prime profiles

在PRIME Profiles` 选项卡中,选择你想切换的显卡, 重启电脑。

你就可以在系统设置 > 细节system settings > details)中看到N卡了。

想要切换回Intel核显,只需要在上图中点击Intel即可。

也可以通过命令行的方式,切换到核显:

sudo prime-select intel

或N卡:

sudo prime-select nvidia

查看哪块显卡正在使用:

prime-select query

如何和卸载N卡驱动

有时个你Nvidia安装失败,或者没有成功,黑屏了,没有办法进入图形界面,或者出现以下错误:

driver ebridge is already registered aborting

这种情况你需要完全的卸载N卡驱动,通过运行下列命令,完全移除nvidia相关包:

sudo apt purge nvidia-*

CISCN(2018)逆向之task-reverse_06

午睡的时候,朋友发来个题,反正闲也闲着,来练练手。

#1 查壳

拿到程序先确认使用的是什么编译器,什么环境下运行,以决定用何种工具。

1525058201289

程序无花无壳,直接上IDA静态了,CTF的题在实机调比较方便。

Jekyll make post categoly without using plugin

在CMS中,tag和categoly的实现方式虽大体相同,但功能和用途却不同。

而当前各种Pages服务仅支持有限的官方插件,自定义插件功能更是可望而不可及,要满足文章自动分类功能实在要用插件完成,之前一直通过本地生成jekyll的方式进行部署。

近日在开发awesom-weblog的时候发现一种不用插件的方法来生成不同的分类的页面。

在不使用自定义插件的情况下,让Jekyll支持文章分类

一、分类页渲染模版(Layout)

由插件版到无插件的迁移会比较简单,已经有存在了分类页文章渲染模版(Layout),无模块的可以参考首页模版进行修改。

示例(categoly.html)如下:

<div id="content">
	  <div class="box archive-meta">
        <h3 class="title-meta"></h3>
      </div>
    

</div>

这里用到的是site全局中的categories属性,该属性以字典的形式存储了所有分类,以及该分类下的post。

比如:我们只需要通过调用site.categories['Linux']便可以拿到该分类下的所有文章。

二、为分类创建分类页而

在layout已经创建好之后, 我们只需要通过该Layout对每个分类进行渲染,而渲染的方法,就是通过创建多个Layout的实现,使其传入不同的page.cat参数,便可生成不同的分类页面了。

一个Layout的实现如下:

添加categories目录,并在目录下创建一个名为Linux.html的文件:

---
layout: category
cat: Linux
---

此实现只需传入分类名无需带任何content,其它分类同样创建不同分类名文件,并传入分类名。

此外,可通过添加permalink:参数自定义目录生成的链接位置。

三、自动创建分类页面

由于分类页面实在简单,但如果分类较多的话,可能通过批量命令的方式,创建页面。

首先获取到博客的分类列表,形成txt文档,每行一个。

在categories目录下创建bash程序autogencat.sh

#!/bin/bash

while read catname
do
	cp Linux.html $catname.html
	sed -i "s/Linux/${catname}/g"  ${catname}.html
done

添加执行权限并且执行:

chmod +x autogencat.sh
./autogencat.sh < catlist.txt

程序会将Linux.html做为生成模板,复制生成其它分类文件,以后新增分类只需要更新catlist.txt目录列表,运行脚本即可。

利用git WebHooks自动部署Pages(Coding Pages)

github pages服务由于安全性的考虑,对其原生jekyll的支持插件进行了过滤。使得只能使用其有限的插件,而且无法使用自定义的插件。这导致了很多问题,比如不能按自己的规则生成归档文件或者分类目录,甚至部署爬虫之类等等。

具体详见: https://pages.github.com/versions/

而国内几大git服务商(Coding,码市之类),也对支持的插件进行了限制,所以在多数情况下,还是选择在本地搭建Jekyll环境,生成静态页面直接上传。

但这极大限制了Jekyll的Markdown in Anywhere便利性,需要在不同的系统上都装上Jekyll的开发环境。

## 现在讨论一种利用中间生产服务器代替本地发布过程的方法。

依赖:一台部署gh-hooks-server的VPS

既然选择不使用git的原生jekyll,也那么需要两个branch, 一个用于jekyll源码的存放, 一个用于托管静态代码

通过一台中间服务器,当源branch进行了更新,则通过webhook自动通知gh-hooks-server,使其执行pull、push操作。

VPS的jekyll环境的搭建不再赘述【首先安装rvm,ruby, 再装jekyll以及插件比如jekyll-paginate】

下面演示安装gh-hooks-server并启动

git clone https://github.com/c834606877/gh-hooks-server.git
cd gh-hooks-server
python setup.py install

ghhooks -a updatemypre:/home/lanbing/updatemypre.sh --secret s3cret

 

程序启动后会侦听8011端口,处理http://0.0.0.0:8011/ghhooks/updatemypre的请求信息,当请求密码通过后,执行对应的bash脚本。

故,我们只需要对源Branch的push消息发送webhook,当gh-hooks-server接收收post消息后,pull 源 Branch,jekyll编译,然后push到Pages Branch。

为了兼容手动发布,编写了一个makefile,用于本地自动发布的脚本:

temp-folder = /tmp/jekyll-temp-site/
repo = git@git.coding.net:iziy/iziy.git

JEKYLL = jekyll

s:
        ${JEKYLL} server
build:
        ${JEKYLL} build -d ${temp-folder}

deploy: build
        cd ${temp-folder} ;\
        git init ${temp-folder} ;\
        git checkout -b coding-pages ;\
        git remote add origin ${repo} ;\
        git add -A ${temp-folder} ;\
        git commit -m "deployed by make" ;\
        git push origin coding-pages --force

push:
        git add -A
        git commit -m "pushed by make"
        git push


clean:
        rm -rf ${temp-folder}

而对于webhook响应的脚本为updatemypre.sh:

#!/usr/bin/bash

echo "webhook enter!"

source /usr/local/rvm/scripts/rvm

cd iziy
git pull
make deploy

Use DWM in Gnome Desktop Environment without Gnome-shell

自从换上轻量级的桌面管理器DWM之后,屏幕利用率得到了提升。但是,由于在dwm仅仅是一个桌面管理器,并不具备其它一些实用功能,比如Ubuntu的NightMode,控制中心等,只有在Gnome环境下才能使用。

之前使用 CustomXSession,调用/etc/X11/Xsession,接着调用~/.xsesseion脚本启动dwm,比如ibus,gtk,相关的配置均在用户目录下的.xsession脚本中完成。

而现在通过gnome-session --session=dwm-gnome方式调用dwm-gnome脚本,由dwm-gnome调用dwm启动,此外,在 /usr/share/gnome-session/sessions/下建立同名session文件,模仿gnome.session,填写RequiredComponents,并且去除org.gnome.Shell,这些组件的启动将会由Gnome-Session进行统一启动管理。

自动安装方案在ArchLinux下有相应关的包可供下载:

pacman -S dwm-gnome

Ubuntu 可以通过Makefile进行安装:

dwm-gnome: https://github.com/palopezv/dwm-gnome

Change Gnome Shell theme after ubuntu upgraded to 1710

由于Ubuntu非LTS版,官方维护周期为9个月,遂更新了Ubuntu从17.04到17.10。

然而更新之后Gnome的桌面管理器(GDM),主题被修改成了类Ubuntu风格橘红色。

这种奇葩的风格,也许只有Ubuntu的创始者们才喜欢吧。

最初想法是寻找到gnome-look上找到原版gdm主题,果然发现了很多好看的主题,类XP,类WIN789,类osx。但花虽美,却不是我想要的。

随着google一通之后,发现解决方案也简单,

sudo update-alternatives --config gdm3.css
There are 2 choices for the alternative gdm3.css (providing /usr/share/gnome-shell/theme/gdm3.css).

  Selection    Path                                          Priority   Status
------------------------------------------------------------
* 0            /usr/share/gnome-shell/theme/ubuntu.css        10        auto mode
  1            /usr/share/gnome-shell/theme/gnome-shell.css   5         manual mode
  2            /usr/share/gnome-shell/theme/ubuntu.css        10        manual mode

Press <enter> to keep the current choice[*], or type selection number:

GDM在/etc/alternatives/目录下有设置了一些可选项,其中就包括了控制gnome-shell主题的配置选项,而更新的Ubuntu只是新增了该选项,并增加了优先级。

如此,可以比较方便的通过update-alternatives命令来修改gdm主题了。

参考

Ubuntu GNOME Shell in Artful: Day 11

Ubuntu 17.04 apt 无法更新,repository '...' does not have a Release file

这阵子打算换Arch的时候,想在Ubuntu最后折腾一番,没想到apt update的时候出现了其怪的事情。

lanbing@LanBing-Ubuntu:~$ sudo apt update
Hit:1 http://ppa.launchpad.net/webupd8team/sublime-text-3/ubuntu zesty InRelease
Ign:2 http://cn.archive.ubuntu.com/ubuntu zesty InRelease
Ign:3 http://cn.archive.ubuntu.com/ubuntu zesty-security InRelease
Ign:4 http://cn.archive.ubuntu.com/ubuntu zesty-updates InRelease
Err:5 http://cn.archive.ubuntu.com/ubuntu zesty Release
  404  Not Found [IP: 91.189.91.23 80]
Err:6 http://cn.archive.ubuntu.com/ubuntu zesty-security Release
  404  Not Found [IP: 91.189.91.23 80]
Err:7 http://cn.archive.ubuntu.com/ubuntu zesty-updates Release
  404  Not Found [IP: 91.189.91.23 80]
Reading package lists... Done
E: The repository 'http://cn.archive.ubuntu.com/ubuntu zesty Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'http://cn.archive.ubuntu.com/ubuntu zesty-security Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: The repository 'http://cn.archive.ubuntu.com/ubuntu zesty-updates Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

尝试了国内的几个主流源:

https://mirrors.tuna.tsinghua.edu.cn/ubuntu/
http://mirrors.aliyun.com/ubuntu/
http://ftp.sjtu.edu.cn/ubuntu/

均出现了类似的错误,后改为官方的源,同样出现此错误,还莫名其妙多出几百个Ign。 仔细到源目录下分析 发现确实不存在http://cn.archive.ubuntu.com/ubuntu/dists/zesty/Release

原来官方把17.04 zesty这个版本的源移到了old-release。 然而国内大部分源也是同步了官方的源,导致了找不到相关源的信息。

遂将source.list源修改成官方的

http://old-releases.ubuntu.com/ubuntu

于是apt update可以顺利更新了。

但问题又来了,由于官方的源在国外,更新速度太慢,眼看着50M的带宽不满足于此。

最后,发现中科大的镜像源提供了old-release,于是:

sudo vi /etc/apt/source.list

将源地址换为:
http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu



lanbing@LanBing-Ubuntu:~$ cat /etc/apt/sources.list
###### Ubuntu Main Repos
deb http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ zesty main universe 

###### Ubuntu Update Repos
deb http://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ zesty-updates main universe 


参考:

![http://www.cnblogs.com/jiangz/p/4076811.html]http://www.cnblogs.com/jiangz/p/4076811.html

Linux Sound Server

ArchLinux下使用DWM有两个月了,但是声音模块一直是很大的问题。

一开始以为DELL Vsion3668的声卡驱动不同寻常,毕竟之前在Windows下的驱动就装了老费劲了。

之前CTF校赛加上嵌入式论文讨论班一阵忙活,空出时间继续搞ArchLinux,没有声音一直很难受。

查文档发现原来是pulseaudio没有启动,这是Linux下的声音Server。

Linux下的声音系统比较杂,现今多数使用ALSA;

ALSA是一个集成了声卡驱动和底层接口的东西,而pulseaudio是声音服务器,应用程序要想输出声音需要往pulseaudio里边送。

于是:

vim ~/.xinitrc
pulseaudio --start

启动声间服务器。

参考:

https://wiki.archlinux.org/index.php/Sound_system https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture

Linux下各种修改GTK主题的方法

X为了提供更加灵活桌面的实现,使得Linux下桌面环境比较繁杂,这也衍生出众多Coder对自己Linux桌面进行定制的程序。有功能全面的Desktop Env,比如GNOME,KDE,LightDM,也有轻量功能强大的Window Manage,比如owesome,dwm。

在图形桌面环境下,各个Desktop Env都提供了相应对自身主题的修改,比如gnome-tweak-tool、unity-tweak-tool,通过修改Shell Theme可以切换不同的主题。

命令行下的修改可以通过 gsettings set org.gnome.desktop.interface gtk-theme “Mytheme” 来完成。

Linux发行版安装之后会默认自带部分主题,更多好看的可以在 Gnome LookKDE Look 下载。

主题的安装,一般将主题包下载解压至/usr/share/themes/ 或~/.local/share/themes/下即可被各种Tweak程序检测到。

但是,以上方法仅仅是对相应Desktop Env下主题的修改。一旦更换了桌面环境或者窗口管理器,这些效果将消失。

其实,GTK本身提供修改主题的方法:

一、可以通过修改程序运行时环境参数GTK_THEME来临时修改单个程序的主题,比如运行使用Adwaita:light替代Ubuntu下Firefox的橘红色主题:env GTK_THEME=Adwaita:light firefox

二、可以通过修改/etc/gtk-3.0/settings.ini~/.config/gtk-3.0/settings.ini文件中gtk-theme-name项,进行全局修改。

此外,文件还提供了icon图标以及sound声音的修改。

在Ubuntu 17.04 下DWM的安装

比较简单的安装方法莫过于通过apt来安装了。

sudo apt-get install dwm

这样的安装方式,虽然提供了四种不同的已经配置好的dwm.default dwm.maintainer dwm.web dwm.winky,但相对于dwm的自定义空间基本上是没有的,毕竟dwm的自定义是通过源码重新编译来完成的。

DWM的源码可以从作者的SuckLess网站下载,网站也提供了一些简单的使用方法,对于一般人来说也足够了。

下载解压至相应路径即可以进行,make install

注意,由于新版本的freetype2库的改动,

需要更新config.mk文件,将中下面两行进行注释:

#OpenBSD (uncomment)

FREETYPEINC = ${X11INC}/freetype2

即启用FREETYPEINC = /usr/include/freetype2

如果还缺少其它头文件,可以利用apt-file search youfile.h进行查找,并安装相应软件包。

如果make install成功。此时,dwm已经被安装到/usr/local/bin目录下。

参照:CustomXSession Ubuntu下标准自定义session的配置方法。

在~/.xinitrc 文件中定入以下内容:


#!/bin/bash

# enable ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export QT4_IM_MODULE=ibus
export CLUTTER_IM_MODULE=ibus
export XMODIFIERS=@im=ibus



exec /usr/local/bin/dwm

重启Ubuntu即可在登录选项中看到预先设置dwm选项。

此外,也可以在命令行界面下执行startx命令启动dwm。