解决两个问题

其一,X中调换左ctrl和capslock键:

创建文件:~/.xmodmap:

remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

/etc/rc.local中添加:

xmodmap ~/.xmodmap 2>/dev/null

其二,alsa的启动错误,参考https://wiki.archlinux.org/index.php/Alsa

执行:

# alsactl -f /var/lib/alsa/asound.state store

FFmpeg详解

为给Zimo转换视频,发现任何工具都没有直接用ffmpeg来得爽快啊。万能的Linux……

ffmpeg使用语法:

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

如果没有输入文件,那么视音频捕捉就会起作用。

作为通用的规则,选项一般用于下一个特定的文件。如果你给 –b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。

缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。

选项

a) 通用选项

-L license

-h 帮助

-fromats 显示可用的格式,编解码的,协议的。。。

-f fmt 强迫采用格式fmt

-I filename 输入文件

-y 覆盖输出文件

-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持

-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持

-title string 设置标题

-author string 设置作者

-copyright string 设置版权

-comment string 设置评论

-target type 设置目标文件类型(vcd,svcd,dvd) 所有的格式选项(比特率,编解码以及缓冲区大小)自动设置 ,只需要输入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

-hq 激活高质量设置

-itsoffset offset 设置以秒为基准的时间偏移,该选项影响所有后面的输入文件。该偏移被加到输入文件的时戳,定义一个正偏移意味着相应的流被延迟了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支持

b) 视频选项

-b bitrate 设置比特率,缺省200kb/s

-r fps 设置帧频 缺省25

-s size 设置帧大小 格式为WXH 缺省160X128.下面的简写也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576

-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777

-croptop size 设置顶部切除带大小 像素单位

-cropbottom size –cropleft size –cropright size

-padtop size 设置顶部补齐的大小 像素单位

-padbottom size –padleft size –padright size –padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)

-vn 不做视频记录

-bt tolerance 设置视频码率容忍度kbit/s

-maxrate bitrate设置最大视频码率容忍度

-minrate bitreate 设置最小视频码率容忍度

-bufsize size 设置码率控制缓冲区大小

-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。

-sameq 使用同样视频质量作为源(VBR)

-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率

-passlogfile file 选择两遍的纪录文件名为file

c)高级视频选项

-g gop_size 设置图像组大小

-intra 仅适用帧内编码

-qscale q 使用固定的视频量化标度(VBR)

-qmin q 最小视频量化标度(VBR)

-qmax q 最大视频量化标度(VBR)

-qdiff q 量化标度间最大偏差 (VBR)

-qblur blur 视频量化标度柔化(VBR)

-qcomp compression 视频量化标度压缩(VBR)

-rc_init_cplx complexity 一遍编码的初始复杂度

-b_qfactor factor 在p和b帧间的qp因子

-i_qfactor factor 在p和i帧间的qp因子

-b_qoffset offset 在p和b帧间的qp偏差

-i_qoffset offset 在p和i帧间的qp偏差

-rc_eq equation 设置码率控制方程 默认tex^qComp

-rc_override override 特定间隔下的速率控制重载

-me method 设置运动估计的方法 可用方法有 zero phods log x1 epzs(缺省) full

-dct_algo algo 设置dct的算法 可用的有 0 FF_DCT_AUTO 缺省的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC

-idct_algo algo 设置idct算法。可用的有 0 FF_IDCT_AUTO 缺省的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM

-er n 设置错误残留为n 1 FF_ER_CAREFULL 缺省 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE

-ec bit_mask 设置错误掩蔽为bit_mask,该值为如下值的位掩码 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)

-bf frames 使用frames B 帧,支持mpeg1,mpeg2,mpeg4

-mbd mode 宏块决策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD

-4mv 使用4个运动矢量 仅用于mpeg4

-part 使用数据划分 仅用于mpeg4

-bug param 绕过没有被自动监测到编码器的问题

-strict strictness 跟标准的严格性

-aic 使能高级帧内编码 h263+

-umv 使能无限运动矢量 h263+

-deinterlace 不采用交织方法

-interlace 强迫交织法编码 仅对mpeg2和mpeg4有效。当你的输入是交织的并且你想要保持交织以最小图像损失的时候采用该选项。可选的方法是不交织,但是损失更大

-psnr 计算压缩帧的psnr

-vstats 输出视频编码统计到vstats_hhmmss.log

-vhook module 插入视频处理模块 module 包括了模块名和参数,用空格分开

D)音频选项

-ab bitrate 设置音频码率

-ar freq 设置音频采样率

-ac channels 设置通道 缺省为1

-an 不使能音频纪录

-acodec codec 使用codec编解码

E)音频/视频捕获选项

-vd device 设置视频捕获设备。比如/dev/video0

-vc channel 设置视频捕获通道 DV1394专用

-tvstd standard 设置电视标准 NTSC PAL(SECAM)

-dv1394 设置DV1394捕获

-av device 设置音频设备 比如/dev/dsp

F)高级选项

-map file:stream 设置输入流映射

-debug 打印特定调试信息

-benchmark 为基准测试加入时间

-hex 倾倒每一个输入包

-bitexact 仅使用位精确算法 用于编解码测试

-ps size 设置包大小,以bits为单位

-re 以本地帧频读数据,主要用于模拟捕获设备

-loop 循环输入流。只工作于图像流,用于ffserver测试

vim cmd

命令说明
进入vi的命令
vi filename打开或新建文件,并将光标置于第一行首
vi +n filename打开文件,并将光标置于第n行首
vi + filename打开文件,并将光标置于最后一行首
vi +/pattern filename打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename..filename打开多个文件,依次进行编辑
光标控制命令
h或^h或Backspace向左移一个字符
b移到前一个字的开头
B移到前一个字的开头,忽略标点符号或移到当前行的第一列
-移到前一行的第一个非空字符
^移到当前行的第一个非空字符
(移到句子的开头
{移到段落的开头
l或空格向右移一个字符
w移到下一个字的开头
W移到下一个字的开头,忽略标点符号
e移到下一个字的结尾
E移到下一个字的结尾,忽略标点符号
$移到当前行的最后一个字符
+或return移到下一行的第一个字符
)移到句子的结尾
}移到下一个段落的开头
k或^p(ctrl+p)向上移一行
n-光标上移n行
M移到屏幕的中间一行
H移到屏幕的第一行
j或^j或^n或Enter向下移一行
n+光标下移n行
L移到屏幕的最后一行
G移到文件的最后一行
nG移到文件的第n行
n$ 光标移至第n行尾
n|移到当前行的第n列
添加文本命令:
a在光标后插入文本
A在当前行插入文本
i在光标前插入文本
I在当前行前插入文本
o在当前行的下边插入新行
O在当前行的上边插入新行
:r file读入文件file内容,并插在当前行后
:nr file读入文件file内容,并插在第n行后
s从当前光标位置处开始,以输入的文本替代指定数目的字符
S删除指定数目的行,并以所输入文本代替之
ncw或nCW修改指定数目的字
nCC修改指定数目的行
Esc回到命令模式
^v char插入时忽略char的指定意义,这是为了插入特殊字符
删除文本命令:
x删除光标处的字符,可以在x前加上需要删除的字符数目
nx从当前光标处往后删除n个字符
X删除光标前的字符,可以在X前加上需要删除的字符数目
nX从当前光标处往前删除n个字符
dw删至下一个字的开头
ndw从当前光标处往后删除n个字
dG删除行,直到文件结束
dd删除整行
ndd从当前行开始往后删除
db删除光标前面的字
ndb从当前行开始往前删除n字
:n,md从第m行开始往前删除n行
d或d$从光标处删除到行尾
dcursor_command删除至光标命令处,如dG将从当产胆行删除至文件的末尾
^h或backspace插入时,删除前面的字符
^w插入时,删除前面的字
^u(Ctrl+u)删除输入方式下所输入的文本
rchar用char替换当前字符
R text escape用text替换当前字符直到换下Esc键
stext escape用text代替当前字符
S或cctext escape用text代替整行
cwtext escape将当前字改为text
Ctext escape将当前行余下的改为text
cG escape修改至文件的末尾
ccursor_cmd text escape从当前位置处到光标命令位置处都改为text
查找与替换命令:
/text在文件中向前查找text
?text在文件中向后查找text
n在同一方向重复查找
N在相反方向重复查找
ftext在当前行向前查找text
Ftext在当前行向后查找text
ttext在当前行向前查找text,并将光标定位在text的第一个字符
Ttext在当前行向后查找text,并将光标定位在text的第一个字符
:set ic查找时忽略大小写
:set noic查找时对大小写敏感
:s/oldtext/newtext用newtext替换oldtext
:m,ns/oldtext/newtext在m行通过n,用newtext替换oldtext
&重复最后的:s命令
:g/text1/s/text2/text3查找包含text1的行,用text3替换text2
:g/text/command在所有包含text的行运行command所表示的命令
:v/text/command在所有不包含text的行运行command所表示的命令
:s/p1/p2/g将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g将文件中所有p1均用p2替换
复制文本命令:
yy将当前行的内容放入临时缓冲区
nyy将n行的内容放入临时缓冲区
p将临时缓冲区中的文本放入光标后
P将临时缓冲区中的文本放入光标前
(a-z)nyy 复制n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行

"(a-z)ndd
删除n行放入名字为圆括号内的可命名缓冲区,省略n表示当前行
(a-z)p
将名字为圆括号的可命名缓冲区的内容放入当前行后
"(a-z)P将名字为圆括号的可命名缓冲区的内容放入当前行前
撤消与重复命令:
u撤消最后一次修改
U撤消当前行的所有修改
.重复最后一次修改
,以相反的方向重复前面的f、F、t或T查找命令
;重复前面的f、F、t或T查找命令
"np取回最后第n次的删除(缓冲区中存有一定次数的删除内容,一般为9)
n重复前面的/或?查找命令
N以相反方向重复前面的/或?命令
保存文本和退出vi:
:w保存文件但不退出vi
:w file将修改保存在file中但不退出vi
:wq或ZZ或:x保存文件并退出vi
:q!不保存文件,退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
选项设置
all列出所有选项设置情况
term设置终端类型
ignorance在搜索中忽略大小写
list显示制表位(Ctrl+I)和行尾标志($)
number显示行号
report显示由面向行的命令修改过的数目
terse显示简短的警告信息
warn在转到别的文件时若没保存当前文件则显示NO write信息
nomagic允许在搜索模式中,使用前面不带“\”的特殊字符
nowrapscan禁止vi在搜索到达文件两端时,又从另一端开始
mesg允许vi显示其他用户用write写到自己终端上的信息
vi中的选项
:set all打印所有选项
:set nooption关闭option选项
:set nu每行前打印行号
:set showmode显示是输入模式还是替换模式
:set noic查找时忽略大小写
:set list显示制表符(^I)和行尾符号
:set ts=8 为文本输入设置tab stops
:set window=n设置文本窗口显示n行
最后行方式命令
:n1,n2 co n3将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d将n1行到n2行之间的内容删除
:w保存当前文件
:e filename打开文件filename进行编辑
:x保存当前文件并退出
:q退出vi
:q!不保存文件并退出vi
:!command 执行shell命令command
:n1,n2 w!command将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command将命令command的输出结果放到当前行
vi的状态
:.=打印当前行的行号
:=打印文件中的行数
^g显示文件名、当前的行号、文件的总行数和文件位置的百分比
:l 使用字母"l"来显示许多的特殊字符,如制表符和换行符
寄存器操作
"?nyy将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p 取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
在文本中定位段落和放置标记
{在第一列插入{来定义一个段落
[[回到段落的开头处
]]向前移到下一个段落的开头处
m(a-z)用一个字母来标记当前位置,如用mz表示标记z
'(a-z)将光标移动到指定的标记,如用'z表示移动到z
在vi中连接行
J将下一行连接到当前行的末尾
nJ 连接后面n行
光标放置与屏幕调整
H将光标移动到屏幕的顶行
nH将光标移动到屏幕顶行下的第n行
M将光标移动到屏幕的中间
L将光标移动到屏幕的底行
nL将光标移动到屏幕底行上的第n行
^e(ctrl+e)将屏幕上滚一行
^y将屏幕下滚一行
^u将屏幕上滚半页
^d将屏幕下滚半页
^b将屏幕上滚一页
^f将屏幕下滚一页
^l重绘屏幕
z-return将当前行置为屏幕的顶行
nz-return将当前行下的第n行置为屏幕的顶行
z.将当前行置为屏幕的中央
nz.将当前行上的第n行置为屏幕的中央
z- 将当前行置为屏幕的底行
nz- 将当前行上的第n行置为屏幕的底行
vi中的shell转义命令
:!command执行shell的command命令,如:!ls
:!!执行前一个shell命令
:r!command读取command命令的输入并插入,如:r!ls会先执行ls,然后读入内容
:w!command将当前已编辑文件作为command命令的标准输入并执行command命令,如:w!grep all
:cd directory将当前工作目录更改为directory所表示的目录
:sh将启动一个子shell,使用^d(ctrl+d)返回vi
:so file在shell程序file中读入和执行命令
vi中的宏与缩写
:map key command_seq定义一个键来运行command_seq,如:map e ea,无论什么时候都可以e移到一个字的末尾来追加文本
:map在状态行显示所有已定义的宏
:umap key删除该键的宏
:ab string1 string2定义一个缩写,使得当插入string1时,用string2替换string1。当要插入文本时,键入string1然后按Esc键,系统就插入了string2
:ab显示所有缩写
:una string取消string的缩写
缩进文本命令:
^i(ctrl+i)或tab插入文本时,插入移动的宽度,移动宽度是事先定义好的
:set ai打开自动缩进
:set sw=n将移动宽度设置为n个字符
n<< 使n行都向左移动一个宽度
n>>使n行都向右移动一个宽度,例如3>>就将接下来的三行每行都向右移动

wahchdog error

昨天升级了一下archlinux,今天启动的时候发现出现了watchdog error。在arch forum上看到相关的讨论:

https://bbs.archlinux.org/viewtopic.php?id=133083

里面给出了一个fix方案,即禁用mei即可:

echo blacklist mei > /etc/modprobe.d/mei.conf

测试之后有效,error msg的确消失了,但是,普遍的观点是这并不算是一个bug,只要忽略掉就可以了。而且在禁用mei以后,似乎有多人出现了不同情况的其他奇怪问题。不过就现在看来,我的机器上还未出现任何异常。

awesome配置

前几天开始从xfce转移到awesome,为了修改好配置文件,花了2个小时把《programming in lua》这本书快速的翻了一遍。经过几天边学边做,目前的awesome桌面看起来有那么回事了~

主要修改的地方:tag的设置,右上角的电量、网速、CPU、内存和音量监控,以及一些简单的外观修改。

下面记录一点备忘的内容。
» 更多内容 …

shotwell的libraw依赖丢失

今天通过pacman -Qdt删除了一些没用的包,不知道是不是这个原因影响了shotwell的libraw依赖,打开shotwell的时候出现这个问题:

shotwell: error while loading shared libraries: libraw.so.2: cannot open shared object file: No such file or directory

通过pacman重新安装shotwell和libraw都没有效果。找了一下发现libraw.so在/usr/lib下面,不知道是不是删除多余的包的时候把一些link文件删除了,于是分别在/usr/local/lib和/lib下生成libraw的link文件,文件名改为libraw.so.2。后来发现只有在/lib下的有效。

因此简单的解决方法是在/lib中生成libraw.so.2文件link到/usr/lib/libraw.so。我安装的是arch64位系统,shotwell似乎并不依赖于/lib64中的文件,因此在/lib64中生成文件也是无效的。

另外,我的机器上的libraw.so是link到libraw.so.5.0.0的,奇怪的是我通过pacman安装libraw的时候显示的版本号是0.14.3-1,不知道是怎么回事。

在xfce中为gtk3应用使用主题

在xfce下有些使用gtk3的应用的界面无法使用xfce设定的主题,解决方法如下:(来自archlinux论坛)

$ pacman -S gtk3 gnome-themes-standard gtk-xfce-engine
$ ln -s /usr/share/themes/Adwaita/gtk-3.0 ~/.config/

简单的说就是将gtk3的theme的路径链接到~/.config/下即可。Adwaita是标准gnome3主题之一,虽然和我平时使用的Equinox主题差别甚大,但是总比没有主题的好,也就懒得去找专门的gtk3主题。

kernel到2.6.38后不能Power Off的问题

Thinkpad T410i 2518JCK,Archlinux x86_64,kernel 2.6.38

从大约一个星期前将kernel升级到core里面的2.6.38之后就出现无法PowerOff的问题。关机之后停止在[Power Off]状态,无法自动关闭电源。大约2分钟后出现Disabling IRQ #19。

查看dmesg没有找到有效的信息。

archlinux论坛上有2个相关内容:
https://bbs.archlinux.org/viewtopic.php?id=113985&p=2
https://bbs.archlinux.org/viewtopic.php?id=111474&p=2

目前结论倾向于kernel的bug,而且从.37就开始出现。

在官网看到nvidia-173xx and nvidia-96xx removed from [extra](2011/04/15)的消息,因此在昨天用Nouveau代替闭源nvidia驱动,问题未解决。

升级BIOS到最新(2011/02/10),问题未解决。

在BIOS中禁用掉所有无关的设备,包括网卡,fingerprint等,问题未解决。

使用GDM代替slim,问题未解决。

启动init 3,不启动slim,不进入X,终端模式下直接halt -p,问题未解决。

有部分论坛回复说禁用laptop-mode可以解决这个问题,还未尝试。

SHLUG邮件列表中建议降低kernel,作为最后的解决方法,还未尝试。

目前问题未解决中。

—————————-
4月21日补充:

最新的kernel 2.6.38-3没有解决问题,但是禁用laptop-mode后能正常关机。问题暂时解决,但这肯定不是最好的方案。

wget整站/目录下载

前几天用wget下了一些东西,发现一些很用的方法,记录一下。

用wget下载整个目录:

[code language="powershell"]wget -t0 -c -nH -np -b -m -P /localdir http://destinationdirectory -o wget.log[/code]

参数的说明如下:

  • -t number (–tries=number) 重试次数,默认为20,设置成0或inf表示不限制重试次数。如果收到“connection refused”或“not found”(404)错误则不再重试。
  • -c (–continue)续传
  • -nH (–no-host-directories)禁止host前缀。默认情况下,执行“Wget -r http://xyz/”创建的目录结构将以“xyz”开始,该选项将禁止该功能。
  • -np(–no-parent)在递归的时候忽略父级目录。
  • -b(–background)启动之后在后台运行。通过-o可以设置记录文件,如果没有设置,默认将记录在wget-log文件里。
  • -m(–mirror)寻找镜像。
  • -P prefix(–directory-prefix=prefix)将“prefix”设置为下载目录的前缀。即将所有内容下载到prefix路径下。(注意,P大写)

用wget递归下载整站:

[code language="powershell"]wget -r -p -np -k http://xxx.com/abc/[/code]

参数说明如下:

  • -p(–page-requisites)下载指定的HTML文件的所有相关内容,包括图片,声音,CSS文件。(注意,p小写)
  • -r(–recursive)递归下载。
  • -k(–convert-links)下载完成后,将下载文件中的链接转换成本地连接,包括图片路径,CSS等等。但是指向下载目录之外的链接将不会被修改。

说的不是乐高

其实,这个说的不是乐高,你懂的。

  • 新用户(以下简称“新”):我想要一个新玩具汽车,每个人都因乐高汽车的好玩而着了迷。所以我也买了它,但当我到家后我才发现,我的盒子里只有积木和齿轮!我的车子在哪里?
  • 老用户(以下简称“老”):你应该在积木之外组装一辆车,这才是乐高的真谛。
  • 新:什么??我不知道应怎样拼装这个车子。我不是个机械师。为什么我应该知道如何组装它?
  • 老:盒子里有使用手册。它上面写着拼装车子的步骤。你不用知道原理,只要按照按部就班就好。
  • 新:好吧,我找到了步骤。这将占用我很多时间!为什么厂家不能装好了再卖给我,还得让我自己动手??
  • 老:并不是所有人都满足于将乐高做成玩具车。这些积木可以被我们组成万物。这才是游戏的真谛。
  • 新:我仍旧不明白为什么厂商不能给我们这种想要车子的人一个成品,如果那些喜欢动手的人高兴可以自己拆了它阿。无论如何,我还是将它组装起来了,尽管某些部件时不时地掉下来。我有什么方法可以解决吗?我能将它们粘起来吗?
  • 老:这就是乐高。他就是用来拆装的。这才是游戏的真谛。
  • 新:但我不希望总是拆拆装装,我仅仅希望一个玩具车而已!
  • 老:呃,欢迎您到地球来。你买的是乐高吗?

Hello world

Hi,我是Tang Bin,finalbug.org是我的个人站点。这里有更多关于我的内容。English readers please click here to learn more about me and this site.

Categories