配置

用xscreensaver替代默认的gnome-screensaver即可找回屏保的配置界面

“高级设置”中 Shell theme 无法使用

虽然安装了 GNOME Shell 的 User theme 扩展,但无法在 Gnome tweak tool
中选择 Shell 主题。大家可使用 dconf-editor 进行设置。

`` example
sudo apt-get install dconf-tools #安装


然后,按下 Alt+F2,输入 dconf-editor,依次打开
org—\>gnome—\>shell—\>extensions—\>user-theme,将键值设为您已经安装的主题名称即可。
或者直接在终端中使用 gsettings 进行设置:

example

gsettings set org.gnome.shell.extensions.user-theme name Aqua


将 Aqua 替换为您已经安装的主题文件。

<h2 id="安装gpointing-device-settings配置触摸板和鼠标">安装gpointing-device-settings配置触摸板和鼠标</h2>

<h2 id="i915错误的一种办法 intel ips 0000:00:1f.6: failed to get i915 symbols, graphics turbo disabled">i915错误的一种办法 intel ips 0000:00:1f.6: failed to get i915 symbols, graphics turbo disabled</h2>

example

sudo bash -c 'echo "softdep intel_ips pre: i915" > /etc/modprobe.d/intel-ips-dep-i915.conf'


<h2 id="配置串口">配置串口</h2>

<https://help.ubuntu.com/community/SerialConsoleHowto>

example

screen /dev/ttyS0 115200


<h2 id="文本环境下网络配置">文本环境下网络配置</h2>

  1. 配置 /etc/network/interfaces文件

此为Linux传统的配置方式,在Ubuntu中依然好用,通过address、netmask、gateway等字段来配置。DNS信息保存在/etc/resolv.conf文件中。

  1. 配置/etc/NetworkManager/system-connections目录下的文件

这是配合图形界面配置程序NetworkManager,可以在桌面通过图形界面配置,配置信息保存在这个目录下的文件中。

<h1 id="安装vmware-tools">安装vmware-tools</h1>

  1. 更新或安装linux headers
example

sudo apt-get update && sudo apt-get install build-essential linux-headers-$(uname -r)


  1. 关联文件,就是因为找不到这个几个文件,vmware tools才认为路径无效的。
bash

cd /lib/modules/$(uname -r)/build/include/linux
sudo ln -s ../generated/utsrelease.h
sudo ln -s ../generated/autoconf.h
sudo ln -s ../generated/uapi/linux/version.h


  1. 再次执行安装就ok啦,运行vmware-config-tools.pl 也没问题了
example

sudo ./vmware-install.pl


<h1 id="tracker">tracker</h1>

<https://wiki.gnome.org/Projects/Tracker> 查看tracker配置命令

example

gsettings list-recursively | grep -i org.freedesktop.Tracker | sort | uniq


<h1 id="GPG签名错误问题">GPG签名错误问题</h1>

有可能是签名本身的问题,考虑使用下面的命令:

example

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 437D05B5
gpg --export --armor 437D05B5 | sudo apt-key add -


或者从http://keyserver.ubuntu.com/ 上找出相应的key导入。
另外我还发现一个很有趣的原因,与drcom有关,在/var/lib/apt/lists目录下的文件本应存放与仓库相关的信息,然而某些文件却变成了drcom拨号的网页,这些文件会导致apt-get升级时出错,错误信息也会提示签名错误。对这种情形的解决方案是把lists目录删除,重建后,再用apt-get
update更新。

出现以下错误:

example

W: GPG 错误:http://archive.ubuntukylin.com:10006 trusty Release: sudo由于没有公钥,无法验证下列签名: NO_PUBKEY D259B7555E1D3C58


解决办法:

example

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com D259B7555E1D3C58


<h1 id="文件系统加密">文件系统加密</h1>

Linux之加密文件系统篇(4) ZDNET安全频道时间:2008-04-14作者:51CTO.COM \|
本文关键词:Ubuntu Linux 数据加密 数据保护

如果配置了PAM(Pluggable Authentication
Modules,即可插入式鉴别模块)子系统在您登录时装载主目录的话,你甚至还能加密整个主目录。因为libpam-mount模块允许PAM在用户登录时自动装载任意设备,所以我们要连同openssl一起来安装该模块。命令如下所示:

\$ sudo apt-get install libpam-mount openssl

接下来,编辑文件/etc/pam.d/common-auth,在其末尾添加下列一行:

auth optional pam<sub>mount</sub>.so use<sub>firstpass</sub>

然后在文件/etc/pam.d/common-session末尾添加下列一行内容:

session optional pam<sub>mount</sub>.so

现在,我们来设置PAM,告诉它需要装载哪些卷、以及装载位置。对本例而言,假设用户名是Ian,要用到的设备是/dev/sda1,要添加到/etc/security/pam<sub>mount</sub>.conf文件中的内容如下所示:

volume Ian crypt - /dev/sda1 /home/Ian cipher=aes aes-256-ecb
/home/Ian.key

如果想使用磁盘映象,你需要在此规定回送设备(比如/dev/loop/0),并确保在Ian登录之前系统已经运行losetup。为此,你可以将losetup
/dev/loop/0
/home/secret.img放入/etc/rc.local文件中。因为该卷被加密,所以PAM需要密钥来装载卷。最后的参数用来告诉PAM密钥在/home/Ian.key文件中,为此,通过使用OpenSSL来加密你的口令来建立密钥文件:

\$ sudo sh -c "echo

"

YOUR PASSPHRASE

"

\| openssl aes-256-ecb \>

/home/Ian.key"

这时,提示你输入密码。注意,这里的口令必需和想要的用户登录密码一致。原因是当你登录时,PAM需要你提供这个密码,用以加密你的密钥文件,然后根据包含在密钥文件中的口令用dm-crypt装载你的主目录。

需要注意的是,这样做会把你的口令以明文的形式暴露在.history文件中,所以要及时利用命令history
-c清楚你的历史记录。此外,要想避免把口令存放在加密的密钥文件中的话,可以让创建加密文件系统的口令和登录口令完全一致。这样,在身份认证时,PAM只要把你的密码传给dm-crypt就可以了,而不必从密钥文件中抽取密码。为此,你可以在/etc/security/pam<sub>mount</sub>.conf文件中使用下面的命令行:

volume Ian crypt - /dev/sda1 /home/Ian cipher=aes - -

最后,为了保证在退出系统时自动卸载加密主目录,请编辑/etc/login.defs文件使得CLOSE<sub>SESSIONS项配置如下</sub>:

CLOSE<sub>SESSIONS</sub> yes

六、小结

数据加密是一种强而有力的安全手段,它能在各种环境下很好的保护数据的机密性。而本文介绍的Ubuntu
Linux
下的加密文件系统就是一种非常有用的数据加密保护方式,相信它能够在保护数据机密性相方面对您有所帮助。

<h1 id="检测传感器">检测传感器</h1>

example

$ sudo yum install -y lm-sensors
$ sudo sh -c "yes|sensors-detect"
$ sensors


<h1 id="切换Display Manager">切换Display Manager</h1>

example

sudo dpkg-reconfigure gdm


执行上面的命令后,Ubuntu就会提示使用哪个display manager了。

<h1 id="Thinkpad T410安装Ubuntu 14.04自编译内核问题总结">Thinkpad T410安装Ubuntu 14.04自编译内核问题总结</h1>

<h2 id="iwlwifi不能编译进内核">iwlwifi不能编译进内核</h2>

只能编译为模块,因为加载firmware需要在内核启动以后,只有以加载模块阶段才可以实现firmware的加载。

<h2 id="iwlwifi加载firmware问题">iwlwifi加载firmware问题</h2>

example

dmesg|grep -Ei 'wlan|firmw|dhc'


通过modinfo iwilwifi可以查看到iwlwifi加载的firmware的文件名及次序。

<h2 id="安装vmware workstation">安装vmware workstation</h2>

Linux内核中已经包含了vmware
workstation所需驱动,因此只要配置时注意选择,安装vmware
workstation后即可直接启动,不必再去编译模块。事实上新的内核下再去编译vmware
workstation所需驱动往往出错。 其中关键是下面两个选项:
CONFIG<sub>VMWAREVMCIVSOCKETS</sub>=m CONFIG<sub>VMWAREVMCI</sub>=m
需要注意的是,宿主机上的内核也是不可以直接把驱动编译进去的,必须以模块形式编译。直接编译进内核会导致找不到/dev/vmci设备。

<h2 id="针对vmware进行优化配置">针对vmware进行优化配置</h2>

<http://forums.gentoo.org/viewtopic-t-961502.html>
这里的配置似乎是针对客户机的,内核要配置:
CONFIG<sub>HYPERVISORGUEST</sub> 这时就可以针对vmware进行内核配置了。

<h2 id="手动安装dkms">手动安装dkms</h2>

/etc/kernel/postinst.d/dkms
脚本在每次添加新内核后都会执行,然而从源码编译的内核往往会卡在这里,无法编译。解决办法是将该脚本从/etc/kernel/postinst.d目录下移走,每次手动调用dkms命令编译,安装完成后再用make
install直接安装。T410的nvidia驱动只能安这种办法安装。

<h2 id="CPU过热导致关机的问题">CPU过热导致关机的问题</h2>

启用多线程编译内核时,如果BIOS设置不当,CPU温度可达100度以上,这里系统会自动关机。解决办法是在BIOS中设置SpeedUp,选用Balanced,而不是Optimized,Balanced可以在温度与性能之间寻找平衡点,这样就不至于让CPU温度过热。

<h2 id="蓝牙驱动">蓝牙驱动</h2>

用lsusb可以查看到蓝牙设备的信息:

example

$ lsusb
Bus 001 Device 004: ID 0a5c:217f Broadcom Corp. BCM2045B (BDC-2.1)
luyanfei@think:~$ lsusb -d 0a5c:217f -v


T410中蓝牙使用了Broadcom公司的BCM2045B。

<h2 id="配置webcam驱动">配置webcam驱动</h2>

<http://www.ideasonboard.org/uvc/faq/> Linux UVC driver and tools – FAQ
T410使用的是UVC设备,接在USB总线上,因此可先通过lsusb查看接口具体信息,然后到内核配置中找出相应配置。

example

CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=m
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y


<h2 id="xorg.conf位置更改">xorg.conf位置更改</h2>

把xorg.conf放在/etc/X11目录下不再有效,从xorg.0.log中可以看出,默认情况下Xorg会从/usr/share/X11/xorg.conf.d/目录下加载配置文件。

<h2 id="nvidia驱动">nvidia驱动</h2>

<https://bugs.launchpad.net/ubuntu/+source/nvidia-graphics-drivers-331-updates/+bug/1289440>
安装optimus for laptop
<http://blog.sciencenet.cn/blog-355217-796874.html>

<h2 id="安全芯片">安全芯片</h2>

T410自带安全芯片,驱动模块名为tpm<sub>tis</sub>。Ubuntu中直接使用tpm的软件名为trousers。

<h2 id="binfmt<sub>misc</sub>">binfmt<sub>misc</sub></h2>

example

CONFIG_BINFMT_MISC=y


Linux内核支持多种二进制文件,像Java,Python和Emacs程度均可直接执行,

example

mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc


文档位置:Documentation/binfmt<sub>misc</sub>.txt

<h2 id="Linux Multipath">Linux Multipath</h2>

LVM启用后就会启用dm<sub>multipath模块</sub>。
<http://www.softpanorama.org/Commercial_linuxes/Devices/multipath.shtml>

<h2 id="安装指纹识别软件">安装指纹识别软件</h2>

libpam-fprintd libfprint0 fprintd fprint-demo

<h1 id="星际译王词典下载">星际译王词典下载</h1>

<http://abloz.com/huzheng/stardict-dic/>

example

tar -xjvf a.tar.bz2 -C /usr/share/stardict/dic


<h1 id="挂起与休眠">挂起与休眠</h1>

  1. 挂起(Standby/suspend to RAM)

计算机将目前的运行状态等数据存放在内存,关闭硬盘、外设等设备,进入等待状态。此时内存仍然需要电力维持其数据,但整机耗电很少。恢复时计算机从内存读
出数据,回到挂起前的状态,恢复速度较快。一般笔记本在电池无故障且充满的情况下可以支持这种挂起数小时甚至数天(依具体机型有差别)。

  1. 休眠(Hibernation/suspend to disk)

计算机将目前的运行状态等数据存放在硬盘上某个文件或者某个特定的区域,关闭硬盘、外设等设备,进入关机状态。此时计算机完全关闭,不耗电。恢复时计算机
从休眠文件/分区中读出数据,回到休眠前的状态,恢复速度较慢。但由于这种方法完全耗电又能保存工作状态,往往被笔记本用户用来作为关机的替代方式。

<https://wiki.archlinux.org/index.php/Pm-utils>
自编译的nVidia驱动在resume时会有问题,屏幕是亮的,但图形界面无法出现。后来发现在/etc/pm/config.d/modules文件中添加下面一行就能解决问题:

example

SUSPEND_MODULES="nvidia"


事实上,根据上面网址的文章,任何在恢复时可能出问题的内核模块,都应该列在这里,在挂起时卸载,恢复时加载。

Ubuntu在hibernate时要把数据写入交换分区,要求交换分区的容量至少要大于内存的容量。https://help.ubuntu.com/community/SwapFaq

uswsusp - tools to use userspace software suspend provided by Linux

<h1 id="关于laptop<sub>mode</sub>">关于laptop<sub>mode</sub></h1>

在默认情况下,你通过安装完系统到笔记本上后,就安装上了laptop-mode-tools工具包。如果你不缺认自已是否安装了laptop-mode-tools工具包,可以在终端中输入下列命令来确认是否安装。

example

dpkg -l | grep laptop-mode-tools


如果你的电脑执行命今后无结果输出,那么你可以通过下列命令来安装。

example

sudo apt-get install laptop-mode-tools


虽然系统已自动安装了laptop-mode-tools,但是是不是就自动启动了laptop<sub>mode模式了呢</sub>?我们用下列命令来判断Laptop是否启用了laptop<sub>mode</sub>,如果显示结果为0,则表示未启动,如果为非0的数字则表示启动了。

example

cat /proc/sys/vm/laptop_mode


怎样启动laptop<sub>mode模式呢</sub>?
1.修改配置文件/etc/default/acpi-support,更改ENABLE<sub>LAPTOPMODE</sub>=true
sudo gedit /etc/default/acpi-support
2.然后在默认情况下UBUNTU系统会在你切换电源到电池供电时启动laptop<sub>mode</sub>,如果你现在就想启动laptop<sub>mode模式</sub>,请直接在终端中输入
sudo laptop<sub>mode</sub> start
启动了laptop<sub>mode之后</sub>,在ubuntu挂起后,基本上就不会遇到无法唤醒的情况了。

[原创]关于laptop挂起后无法唤醒的问题解决方法
linux的ACPI定义了不同的睡眠状态,常用的有 S1:STOPGRANT 供给停止,CPU
Halts,由CPU停止而引起的相关组件一起停止运作,相当于WINDOWS的Standby\[待机\]
S2:类似于S3,系统保留状态,当前并没起用此状态。 S3:Suspend to RAM
挂起到内存,相当于WINDOWS的Sleep\[睡眠\],注S3当前不支持 Kernel 2.4.x。
S4:Suspend to Disk
挂起到硬盘,相当于WINDOWS的Hibernate\[休眠\],注S3当前不支持 Kernel
2.4.x。 S5:Soft Off 关闭系统,相当于WINDOWS的Shut Down\[关机\]
关于SlEEP状态
的更多祥情请参况:http://acpi.sourceforge.net/documentation/sleep.html
怎样查看自已的laptop支持那种睡眠状态?

example

cat /sys/power/state


在我的laptop返回如下结果:mem disk 说明我的laptop绝对支持支持S3,S4状态
怎样启动系统对ACPI挂起的支持?
系统ACPI支持的配置文件为/etc/default/acpi-support。 通过cat /cat
/proc/acpi/sleep或cat /sys/power/state得到你的laptop ACPI的挂起状态。
如上查看结果我的laptop ACPI支持S3,S4 更新acpi-support文件
ACPI<sub>SLEEP</sub>=true ACPI<sub>HIBERNATE</sub>=true
ACPI<sub>SLEEPMODE</sub>=mem
#(如果你想用挂起状态S1,可改为ACPI<sub>SLEEPMODE</sub>=standby,因为更多的laptop支持此状态)
此文件的其它配置选项则用默认设置即可。 常见问题:
Q:我已设置ACPI<sub>SLEEP</sub>=true,但仍然无法挂起?
A:请查看你的laptop支持那种ACPI Sleep状态先。 Q:我的laptop支持ACPI
Sleep的S3,S4,可以挂起,但S4状态的挂起后,系统无法唤醒?
A:我也曾经遇到过相似问题,但在我把系统切入到laptop<sub>mode后</sub>,就可正常唤配啦,
怎样切入系统到laptop<sub>mode</sub>,请参阅:http://kw-gift.com/blog/index.php?entry=entry060927-215157

[原创]关于UBUNTU发行版进入LAPTOP_MODE的方法。

在默认情况下,你通过安装完系统到笔记本上后,就安装上了laptop-mode-tools工具包。
如果你不缺认自已是否安装了laptop-mode-tools工具包,可以在GNOME
Terminal中键入 which
laptop<sub>mode看看系统是否找到laptopmode文件</sub>,在我的电脑上结果是/usr/sbin/laptop<sub>mode</sub>,说明此工具包已安
装。如果你的电脑执行命今的后无结果输出,那么你可以通过 sudo apt-get
laptop-mode-tools来安装。
即然系统已自动安装了laptop-mode-tools是不是就自动启动了laptop<sub>mode模式啦呢</sub>?
你可以在Gnome Terminal中键入cat /proc/sys/vm/laptop<sub>mode</sub>
看看结果,如果结果为零(0)则说明系统并没进入laptop<sub>mode模式</sub>,结果非零则为laptop<sub>mode模式</sub>。
laptop<sub>mode模式有何好处呢</sub>?
这个问题问的好,但笔者并非laptop方面专家,不能为你解释关于laptop方面的电路和电源管理方面的硬件设计原理。只能告诉你进入
laptop<sub>mode模式后</sub>,系统会根据当前系统负荷和电源使用情况来为系统作一些调整,如调整CPU运行频率,CPU风扇运行速度,硬盘驱动器运行状
态(state:active/idle/standby),闭合或开启LCD所执行的命今,移到办公时切换网络环境时网卡自适应性(此部分功能了解
laptop<sub>netconf工具包</sub>),和一些其它硬件的ACPI控制(比如:笔者的光驱并在不用时就处于standby状态)等,最简单的讲法就是动态
使用系统资源,尽可能的增长电池的使用时间(你可能在想你的laptop时时刻刻都在用电源适配器供电,电池只当UPS用而已,laptop<sub>mode对</sub>
你没什么作用,这样想可能是你忘记啦,laptop<sub>mode可以根据当前系统负何来动态使用系统资源</sub>,你不想让你的laptop寿命更长些吗?)。
要使用laptop<sub>mode的必备条件是什么</sub>?
绝对要用系统支持ACPI,如果你的laptop只支持APM那就不要考虑啦,当然必不可少laptop<sub>modetools工具包</sub>,然后启动laptop<sub>mode模式</sub>。
怎样启动laptop<sub>mode模式呢</sub>? 1。 sudo gedit
/etc/default/acpi-support,更改ENABLE<sub>LAPTOPMODE</sub>=true,如果你是ATI的RADEON系统显卡,可
同时更改RADEON<sub>LIGHT</sub>=true,如果你的laptop支持ACPI挂起,请启用ACPI<sub>SLEEP</sub>=true设置。
2。默认情况下UBUNTU系统会在你切换电源到电池供电时启动laptop<sub>mode</sub>,如果你现在就想启动laptop<sub>mode模式</sub>,请直接在Gnome
Terminal中键入sudo laptop<sub>mode</sub> start
怎样停用laptop<sub>mode模式</sub>? Gnome Terminal中键入sudo
laptop<sub>mode</sub> stop 怎样重启laptop<sub>mode模式</sub>? Gnome
Terminal中键入sudo laptop<sub>mode</sub> restart
laptop<sub>mode启动后都作了什么</sub>?怎样查看laptop<sub>mode信息</sub>?
强 列建意你打开两个Gnome
Terminal,一个Terminal在启用laptop<sub>mode信息前</sub>,键入sudo
laptop<sub>mode</sub> status,另一个在sudo laptop<sub>mode</sub>
start后键入sudo laptop<sub>mode</sub>
status,看看在laptop<sub>mode可以控制那些资源</sub>,资源使用情况有何不同。
怎样进一步微调laptop<sub>mode对系统资源的使用</sub>?
UBUNTU的laptop<sub>mode工具包的配置文件为</sub>/etc/laptop-mode/laptop-mode.conf,强烈建意你在对其文件作了改动前,先保留一个原件副本。
因为laptop-mode.conf很多设置和系统硬件相关,如果你不太熟悉自已系统的硬件和其ACPI支持情况就请用默认配置吧。
(因这一部分的内容太过复杂,请读者自行探索。)
注意微调laptop-mode.conf后,请用sudo laptop<sub>mode</sub>
restart来重启lpatop<sub>mode模式使其生效</sub>。

<h1 id="清除最近使用文件记录">清除最近使用文件记录</h1>

example

sudo apt-get install activity-log-manager


<h1 id="安装nVidia驱动">安装nVidia驱动</h1>

example

apt-get remove xserver-xorg xorg


不移除的话,即使kill命令关掉X进程,它可能会自动重启。安装完成后再重新安装xserver-xorg等。
运行.run文件后,需要注意,Ubuntu下Xorg的配置文件在/usr/share/X11/xorg.conf.d/目录下。
还需要注意一点:内核不必能编译进noveau模块,否则nvidia模块还是会无法加载。

<h1 id="Debian包管理 <span class="tag" tag-name="deb"><span class="smallcaps">deb</span></span>">Debian包管理 <span class="tag" tag-name="deb"><span class="smallcaps">deb</span></span></h1>

<h2 id="概念">概念</h2>

Debian包可分为Binary Package和Source Package,单个Source
Package可能会对应多个Binary
Package。Package又可按Category分,主要的Category有:admin,base,comm,devel等。
Package Priority分为以下几种:

  1. required

移除这个级别的包可能会对系统稳定性产生影响,是系统运行必须的包。

  1. important 类UNIX系统必备的程序。
  2. standard 可以提供字符界面,minimal debian包括了这个级别的包。
  3. optional X Window System,TeX等。
  4. extra 包含与前几个级别冲突的包。

Decian policy:

  1. 任何包都不可依赖比自身更低级别的包。optional的包不可依赖extra的包,standard的包不能依赖optional的包。
  2. base

system只包含required和important级别的包,这些包会先冻结。然后凝结standard,最后才冻结optional和extra。所有冻结完成后才能发布新的版本。

deb的名字包括:name<sub>versionarch</sub>。使用下划线是debian的规定。不规范的名字可用dpkg-dev包中的dpkg-name来必名字。
:\$ dpkg-name foo.deb :moved ’foo.deb’ to
’./postfix<sub>2</sub>.1.5-1<sub>i386</sub>.deb

解开deb包:

example

$ ar t postfix_2.1.5-1_i386.deb
debian-binary //用于标识这是一个debian包,它包含版本号。
control.tar.gz //包管理器需要的控制信息
data.tar.gz //包的具体内容,需要放到/目录下。直接解压在/下,相当于只解开debian包,但并不配置。


用less查看deb包:

example

$ export LESSOPEN="|lesspipe %s"
$ less postfix_2.1.5-1_i386.deb


control files

  1. control

必须的配置文件,dpkg用这里的信息来验证依赖关系,并显示帮助信息。

  1. conffiles

列在这里的一般是配置文件,升级包时,包管理器要保留用户在这些文件上的修改。

  1. preinst

安装或升级之前执行的脚本,失败的情况下,旧的脚本有机会再次执行。

  1. postinst

unpacking之后执行的脚本,失败情况下,可以用这个脚本让配置回到正确状态。
脚本执行在debian
policy中描述,http://www.debian.org/doc/debian-policy。

  1. prerm 移除包之前执行的脚本。升级时,旧包的prerm脚本有机会执行。
  2. postrm 移除包后执行的脚本。
  3. md5sum
  4. shlibs

列出提供的库及库的SONAME,SONAME是动态链接器在链接时的定位符。

  1. config

config脚本用于根据用户输入来配置软件。用户的响应会保存在debconf数据库中。

  1. templates 使用debconf时,用从template文件中读取问题及注意事项。

<h2 id="APT——Advanced Package Tool">APT——Advanced Package Tool</h2>

<h3 id="Repository配置">Repository配置</h3>

base-config包中的apt-cdrom和apt-setup可用来往sources.list文件中添加条目。

example

apt-cdrom --cdrom /media/cdrom
apt-setup


apt-spy可用来找到最佳镜像。它即可以限制为有限的几个国家,也可以限制为有限的几个服务器:

bash

̃# cat <> /etc/apt-spy.conf
Bodensee:
AT
CH
DE
EOF
̃# apt-spy update
Updating...
Grabbing file http://http.us.debian.org/debian/README.mirrors.txt...
Update complete. Exiting.
̃# apt-spy -d sarge -a Bodensee


<h3 id="APT的配置">APT的配置</h3>

/etc/apt/apt.conf的两种写法:

bash

APT::Cache-Limit 16777216;
APT::Get::Show-Upgraded true;
APT::Get::Default-Release "sarge";
APT::Get::Purge false;
Acquire::Queue-Mode host;
Acquire::Retries 0;


bash

APT {
Cache-Limit 16777216;
Get {
Default-Release "sarge";
Show-Upgraded true;
Purge false;
} ;
} ;
Acquire {
Queue-Mode host;
Retries 0;
} ;


也可以直接在命令行参数中直接设置:

example

̃# apt-get install --download-only postfix
̃# apt-get install --option APT::Get::Download-Only=true postfix


APT Hook:

bash

DPkg {
Pre-Invoke { "mount -o remount,rw /usr"; } ;
Post-Invoke { "mount -o remount,ro /usr"; } ;
} ;


<h3 id="APT安装包">APT安装包</h3>

apt不使用数据库,而是每次算出依赖包的位置,计算是依据是/var/lib/apt/lists目录下的文件,这些文件是由apt-get
update下载下来的。 只模拟,不安装:

example

̃# apt-get install --simulate


使用POSIX正则表达式:

example

apt-get install libusb- \ (0 \ .1-4 \ |-dev \ )


重新安装:

example

apt-get install --reinstall postfix


<h3 id="搜索">搜索</h3>

example

apt-cache search palm sync command line


默认情况下,APT::Cache::ShowFull
true,若要限制为只在名字中搜索,那么要设置APT::Cache::NamesOnly true。

用apt-file搜索包中的单个文件:

example

apt-file update //文件会在/var/cache/apt
apt-file search /usr/bin/convert
apt-file list postfix


查询包的依赖项:

example

apt-cache depends apt-file


查询依赖该包的其它包:

example

apt-cache rdepends apt-file


可以同时显示正向和反向依赖:

example

apt-cache showpkg apt-file


查询postfix建议安装,并且本机已经安装的包:

example

apt-rdepends --state-show=Installed --state-follow=Installed --show=Suggests --follow=Suggests postfix


查看依赖关系图。最基本是工具是graphviz包中的dot和neato,可用来生成Encapsulated
PostScript (EPS)。

example

̃$ apt-cache dotty postfix > /tmp/postfix.dot
̃$ dot -Tps -o /tmp/postfix.eps /tmp/postfix.dot


上面的命令输出的内容太多,可以加以限制:

example

apt-cache dotty --option APT::Cache::GivenOnly=true postfix netbase


也可以用springgraph来生成png图片:

example

̃$ apt-rdepends --dotty postfix > /tmp/postfix.dot
̃$ springgraph < /tmp/postfix.dot > /tmp/postfix.png


<h3 id="卸载">卸载</h3>

postfix提供了mail-transport-agent,如果直接remove该包,会导致相关的包都被移除。可以设定用其它包来替换postfix,语法是在尾巴上添上“+”号。

example

̃# apt-get remove postfix zmailer+


自动移除配置文件:

example

̃# apt-get remove --purge mc


或者设置APT::Get::Purge true。

<h3 id="版本升级">版本升级</h3>

简单算法:

example

apt-get --show-ugraded upgrade


复杂算法,更慢,用于发行版升级:

example

apt-get --show-upgraded dist-upgrade


<h3 id="替代dpkg –pending">替代dpkg –pending</h3>

example

̃# echo mc install | dpkg --set-selections
̃# echo apache2 deinstall | dpkg --set-selections
̃# apt-get dselect-upgrade


或者用文件保存设置选项:

example

̃# dpkg --set-selections < selections.txt
̃# apt-get dselect-upgrade


系统之间的克隆。dpkg
–get-selections输出相关的包的信息,至于这个包是否确实安装过(在/var/lib/dpkg/status/目录下有条目),它是不管的,因此在克隆一个系统时,可能会安装过多的包。正确的方法是使用dpkg-query:

example

̃# ls -F
selections.source
̃# dpkg-query --show --showformat='$Package\n' > selections.local
̃# diff selections.source selections.local | grep 'ˆ>' | cut -c3- | xargs dpkg --purge


<h3 id="解决APT数据库的不一致问题">解决APT数据库的不一致问题</h3>

example

apt-get --fix-broken install


<h3 id="用tasksel选择一组工具包">用tasksel选择一组工具包</h3>

<h3 id="deb与rpm的比较">deb与rpm的比较</h3>

<h3 id="debconf">debconf</h3>

deb中的templates文件列出了很多问题,结合config脚本,就可以让debconf向用户提问。debconf本身不会对包进行任何配置,它完全为了与用户交互而用的,并缓存用户的响应。真实的配置往往由postinst脚本完成。postinst脚本先调用config脚本,让用户的响应保存到debconf数据库,然后在接下来的配置过程中通过编程接口调用这些用户的响应。
templates中的问题可分不同的级别:critical,high,medium,low。通过设置环境变量,可以在安装过程中忽略该级别以下的问题。

example

DEBIAN_PRIORITY=low apt-get install postfix


重新配置,并选择前端界面的命令如下:

example

dpkg-reconfigure --frontend=readline debconf


<h3 id="设置apt-get代理的两种方法">设置apt-get代理的两种方法</h3>

  1. export

http<sub>proxy</sub>=http://yourproxyaddress:proxyport" target="_blank">http://yourproxyaddress:proxyport">http://yourproxyaddress:proxyport

  1. sudo gedit /etc/apt/apt.conf Acquire::<http::Proxy>

"http://yourproxyaddress:proxyport"" target="_blank">http://yourproxyaddress:proxyport">http://yourproxyaddress:proxyport"

<h2 id="包的修改">包的修改</h2>

  1. 获得源码包 debian的源码包由三部分组成:Debian Source Control (DSC)

file,A native source package lives in a tarball, such as
apt<sub>0</sub>.6.25.tar.gz,The diff.gz file provides the
information needed to turn the tree in the orig.tar.gz file into a
Debian package tree (e.g. postfix<sub>2</sub>.1.5-1.diff.gz).

example

apt-get source --download-only postfix
dpkg-source -x postfix_2.1.5-1.dsc


  1. 修改、编译源码
example

apt-get install build-essential fakeroot
apt-get build-dep postfix
fakeroot debian/rules clean
fakeroot debian/rules build


  1. 记录修改 在版本号中添加+0.local.1字样。1.2-3 would become

1.2-3+0.local.1 用devscripts中的debchange修改changelog文件。

bash

̃$ export DEBEMAIL="martin f. krafft "
̃$ VERSION=$(dpkg-parsechangelog | sed -ne ’s,ˆVersion: ,,p’)
̃$ dch --version=$VERSION+0.local.1 -- Made some local changes
̃$ dpkg-parsechangelog
[...]
Version: 2.1.5-1+0.local.1
[...]

  • Made some local changes.

  1. 构建
example

̃# apt-get install fakeroot dpkg-dev build-essential
̃# apt-get build-dep postfix
̃$ dpkg-buildpackage -rfakeroot -uc -us


  1. 用apt-build构建优化包

<h2 id="Debian Policy">Debian Policy</h2>

<h2 id="配置Oracle官方JDK">配置Oracle官方JDK</h2>

Debian中的java-common包是所有Java包的基石,为了让Oracle官方的JDK融入Debian的包体系中,官方的JDK安装步骤完成以后是不够的。
Debian中安装JDK的最佳方案是在/usr/lib/jvm下创建软件链接到实际目录,以后升级JDK,只需更新该软链接,其余内容都无需变更。比如我的JDK安装到了/opt/jdk1.6.0<sub>32</sub>,用下面的命令创建soft
link:

example

sudo ln -s /opt/jdk1.6.0_32 /usr/lib/jvm/java-6-sun


根据/usr/share/doc/java-common/debian-java-faq/index.html的描述,需要创建一些dummy包,以满足包管理体系中依赖管理的要求,为了生成这些dummy包,需要equivs工具。

example

sudo apt-get install equivs


安装步骤如下:

example

cd /usr/lib/jvm/java-6-sun
cp /usr/share/doc/java-common/dummy-packages/*.control .
find . -name '*.control' -exec equivs-build {} \;
sudo dpkg -i *.deb
sudo update-alternatives --verbose --install /usr/bin/java java /usr/lib/jvm/java-6-sun/bin/java 500 \
--slave /usr/share/man/man1/java.1 java.1 /usr/lib/jvm/java-6-sun/man/man1/java.1
sudo update-alternatives --config java
sudo update-alternatives --verbose --install /usr/lib/mozilla/plugins/libjavaplugin.so mozilla-javaplugin.so \
/usr/lib/jvm/java-6-sun/jre/lib/amd64/libnpjp2.so 500
sudo update-alternatives --config mozilla-javaplugin


Ubuntu的JDK共有以下几个命令工具都由update-alternatives管理:

example

java,javac,javaws,jexec,keytool,rmid,rmiregistry,servertool,tnameserv,unpack200,itweb-settings


jdk中Firefox的java插件的so文件叫libnpjp2.so,并不是libjavaplugin<sub>jni</sub>.so,这里比较奇怪的一点。
在/usr/lib/jvm下复制.java-6-openjdk.jinfo

example

cp .java-6-openjdk.jinfo .java-6-sun.jinfo


修改.java-6-sun.jinfo文件,里面的路径都替换成java-6-sun下的路径,然后执行

example

sudo update-java-alternatives -s java-6-sun


结果发现部分程序没有注册,需要用update-alternatives逐个注册了才行。
像greenfoot这样的包直接依赖于sun-java6-jdk或openjdk-6-jdk,强制安装greenfoot会导致apt-get之类的工具无法使用。这时需要自己复制一个control文件,不妨命名为sun-java6-jdk-dummy.control,把里面的名字改一下,重点是改下面这一行:

example

Provides: sun-java6-jdk


再用quivs-build生成deb文件,并安装,再来安装greenfoot就没有问题了。

<https://wiki.debian.org/JavaPackage>
Debian中可以用java-package工具,将Oracle JDK直接打包成deb格式。

<h2 id="不升级指定软件包的命令 <span class="tag" tag-name="dpkg"><span class="smallcaps">dpkg</span></span>">不升级指定软件包的命令 <span class="tag" tag-name="dpkg"><span class="smallcaps">dpkg</span></span></h2>

example

echo linux-generic hold | sudo dpkg --set-selections
echo linux-image-generic hold | sudo dpkg --set-selections
echo linux-headers-generic hold | sudo dpkg --set-selections


<h2 id="移除软件包 <span class="tag" tag-name="dpkg"><span class="smallcaps">dpkg</span></span>">移除软件包 <span class="tag" tag-name="dpkg"><span class="smallcaps">dpkg</span></span></h2>

用dpkg –remove移除软件包后,可能会有配置文件遗留,此时要用dpkg
–purge。某个包的移除可能会导致其他包被标记为purge或remove,此时可以用dpkg
–remove –pending或dpkg –purge
–pending来执行做好标记的任务。可以用awk来过滤dpkg输出,查看package
select status dpkg –get-selections \| awk '{if(\$2!="install") print
\$0;}'

<h2 id="PPA(Personal Package Archive)软件源配置办法">PPA(Personal Package Archive)软件源配置办法</h2>

<h3 id="Ubuntu9.10之后的安装办法">Ubuntu9.10之后的安装办法</h3>

  1. 访问http:/*ppa.launchpad.net* ,找到软件PPA的位置

比如,firefox最新稳定版地址 ppa:mozillateam/firefox-stable

  1. sudo add-apt-repository ppa:mozillateam/firefox-stable

该命令会自动获取PPA key

  1. sudo apt-get update

<h3 id="PPA地址收藏">PPA地址收藏</h3>

  • ppa:fcitx-team/stable
  • ppa:nvidia-vdpau/cutting-edge-multimedia
  • ppa:cassou/emacs emacs24
  • ppa:ubuntu-elisp/ppa emacs
  • ppa:org-mode/daily-ppa
  • ppa:jon-severinsson/ffmpeg
  • ppa:motumedia/mplayer-daily
  • ppa:tualatrix/ppa Ubuntu Tweak
  • ppa:jonoomph/openshot-edge 视频编辑
  • ppa:svn/ppa subversion team
  • ppa:brightbox/ruby-ng

<h2 id="libdvdcss">libdvdcss</h2>

medibuntu已经废弃,使用libdvdcss可以添加videolan源:

bash

curl ftp://ftp.videolan.org/pub/debian/videolan-apt.asc | sudo apt-key add -
echo "deb ftp://ftp.videolan.org/pub/debian/stable ./" | sudo tee /etc/apt/sources.list.d/libdvdcss.list
sudo apt-get update


<h2 id="Debian各种包的打包策略文档">Debian各种包的打包策略文档</h2>

  1. perl打包策略

<http://www.debian.org/doc/packaging-manuals/perl-policy/>

  1. java打包策略

<http://www.debian.org/doc/packaging-manuals/java-policy/>

  1. python打包策略

<http://www.debian.org/doc/packaging-manuals/python-policy/>

<h2 id="Ubuntu的自动更新">Ubuntu的自动更新</h2>

<https://help.ubuntu.com/lts/serverguide/automatic-updates.html>
需要安装unattended-upgrades,在该包的README文件中可以找到详细的说明。最重要的是配置origin:archive:

bash

// Automatically upgrade packages from these (origin:archive) pairs
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
"${distro_id}:${distro_codename}-updates";
};


这里定义的两个变量distro<sub>id和distrocodename其实是通过lsb</sub>-release命令来获取的。unattended-upgrades是个python脚本,里面有下面的代码:

python

DISTRO_CODENAME = subprocess.check_output(
["lsb_release", "-c", "-s"], universal_newlines=True).strip()
DISTRO_ID = subprocess.check_output(
["lsb_release", "-i", "-s"], universal_newlines=True).strip()


根据文件说明,通过下面的命令可查看origin和archive:

example

apt-cache policy


"origin:archive"分别是上面命令输出的o字段和a字段。
也可以通过新添加的配置来宝座自动升级的软件包:

python

Unattended-Upgrade::Origins-Pattern {
"origin=Google\, Inc.,suite=contrib";
"site=www.example.com,component=main";
};


<h2 id="Release文件">Release文件</h2>

<http://mirrors.aliyun.com/ubuntu/dists/trusty/Release>
Release文件中有很多信息,配置apt
preference时很有用,具体参看apt<sub>preference的man文档</sub>。

<h1 id="windows下tigntvnc无法连接问题">windows下tigntvnc无法连接问题</h1>

example

Error in TightVNC Viewer: No security types supported. Server sent security types, but we do not support any of their.


用dconf-editor编辑下面的选项 org \> gnome \> desktop \> remote-access
取消钩选
“REQUIRE-ENCRYPTION”属性,现在可以在windows下正常使用TightVNC来连接了。

<h1 id="如何在 Ubuntu 上启用内核实时补丁服务">如何在 Ubuntu 上启用内核实时补丁服务</h1>

如果你想在你的 Ubuntu 上启用这个服务,首先你需要去 Canonical
的实时补丁服务网站获取一个令牌,这是一串类似 md5
编码的字符串。然后使用如下命令安装 livepatch 的 Snap
软件包,并用你的令牌来启用该服务。

example

sudo snap install canonical-livepatch
sudo canonical-livepatch enable d3b07384d113edec49eaa6238ad5ff00


这样,你就启用了内核实时补丁服务。你可以通过如下命令来检查是否已经生效:

example

canonical-livepatch status
kernel: 4.4.0-38.57-generic
fully-patched: true
version: "12.2"


这个服务可以免费用在你的最多三个机器上。一般来说,就个人使用也足够了,但是如果对于将
Ubuntu 或 Ubuntu server
用于企业环境的用户来说,三台就显然不够了,超过三台的部分,你可以购买一份商业支持服务,每个月
\$12 起。 另外,需要注意的是,Canonical 的实时补丁服务仅支持 64 位的
Ubuntu 16.04,且运行长期支持版的 Linux 4.4 内核才行。

<h1 id="修改locale">修改locale</h1>

example

sudo nano /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"


bash

$ sudo locale-gen "en_US.UTF-8"
Generating locales...
en_US.UTF-8... done
Generation complete.

$ sudo dpkg-reconfigure locales
Generating locales...
en_US.UTF-8... up-to-date
Generation complete.

``

Anki重新生成Latex图片

You can remove all the latex-\* files in your media folder, then use
Tools\>Check Media to rebuild them.
*home/luyanfei*.local/share/Anki2/用户1/collection.media