在用xrandr设置双屏幕扩展显示的时候,有可能会提示下面的错误:
xrandr: screen cannot be larger than 1680×1680 (desired size 3120×1050)
该错误说明Xorg的虚拟桌面不够大,可以通过使用Xorg.conf的Virtual指令更改虚拟桌面的大小。例如:
Section "ServerLayout" Identifier "Xorg Configured" Screen 0 "Primary Screen" 0 0 EndSectionSection "Monitor" Identifier "Primary Monitor" Modeline "1400x900" 104.23 1400 1480 1632 1864 900 901 904 932 -HSync +Vsync EndSectionSection "Screen" Identifier "Primary Screen" Monitor "Primary Monitor" DefaultColorDepth 24 SubSection "Display" Depth 24 Modes "1400x900" "1024x768" Virtual 3120 1050 EndSubSection EndSectionSection "DRI" Mode 0666 EndSection
- 获取SMART信息:
smartctl -a -d ata /dev/sda - 健康检查:
smartctl -H /dev/sda - 查看错误:
smartctl -l error /dev/sda - 打开SMART支持:
smartctl -s on -d ata /dev/sda
几天前,在一个没有X的机器上安装emacs23。操作系统应该是RHEL5。编译的时候会提示:找不到系统的alloca实现。出现类似下面的提示信息
configure: error: a system implementation of alloca is required
查看config.log发现出错原因是编译alloca测试程序时候加上了-lX11。事实上alloca是glibc提供的函数应该不需要-lX11。
configure:15318: checking for working alloca.h
configure:15345: gcc -o conftest -O2 -D_BSD_SOURCE -Wl,-znocombreloc conftest.c -lX11 >&5
解决方法自然也很简单,就是编译的时候带上 --with-x=no :)
经常去fzdm.com看海贼的漫画,每次都感觉那个站好慢,翻页经常不出图。因此做了这个脚本。可以先下载下来,再离线阅览。脚本本身还会制作一个简单的index.html方便浏览。
SSH逃逸键的作用有些类似Telnet的”^]“逃逸。可以让你在一个连接好的终端上进一步控制SSH连接。首先,我们看看这个逃逸键能帮我们做什么。在SSH终端里输入回车然后马上输入字符”~“再输入字符”?“,便可以调出SSH逃逸键使用帮助。你应该能看到类似下面的输出:
blackhole:~ $ ~?
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - Request rekey (SSH protocol 2 only)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
注意最后一行的Note,它说明了逃逸键使用的条件,即必须在回车后马上键入逃逸键。
比较常用的功能可能是用 "~."断开一个连接。有些时候我们在SSH终端上启动了有问题的daemon程序,或是SSH连接因为某种原因进入stalled状态,导致SSH不能正常终止。这时候就可以使用“~.”来终止这个连接。这要比关闭再打开你的终端窗口方便很多。
“~C“会打开一个SSH控制终端。在这个控制终端里,你可以进行端口映射的设置。也就是输入和SSH命令行参数一样的-L或是-R什么的。
“~^Z“是一个比较有趣的功能,可以让你挂起一个SSH连接并回到localhost的终端上。你可以用这个功能做些localhost上的操作再fg回去。也可以在做了端口转发后退出SSH终端并通过bg把它放到后台去。
逃逸键可以通过在执行SSH的时候用-e参数进行就改,具体方法请查看man ssh吧。
这两天逛水木看到一个对这个问题很不错的解法 — 使用CPAN模块 local::lib 。该模块可以生成环境变量,让单个用户可以在自己家目录中安装需要的perl模块。
举例来看,比如我的模块都在~/local/lib/perl5下。就把下面命令加入.bashrc中
eval $(perl -Mlocal::lib=~/local/lib/perl5)
重新登录之后,cpan就会把默认安装目录放到~/local/lib/perl5下了。
编写程序时,在程序中的头部加入“use local::lib qw(/local/lib/perl5)“就可以将/local/lib/perl5加入模块的搜索路径了。
来自早年和豹爷的聊天记录
17:37 < weibao> Bash
的默认配置会存在一个问题,如果同时打开两个(或两个以上的)控制台,那么在这两
个控制台中执行的命令并不会互相分享到 history
中。有的命令历史甚至最终会被覆盖掉。要解决这个问题,可把下列内容添加到
~/.bashrc 或 ~/.bash_profile 文件中:
17:37 < weibao> shopt -s histappend
17:37 < weibao> PROMPT_COMMAND=‘history -a’
17:38 < weibao> 这个对于多人同时操作一个账号的时候,有点儿用
17:40 < weibao> 中午我记得好像是谁问这个来着
17:40 < laserhe> cool
17:40 < laserhe> 我需要这个
17:43 < jianingy> cool!
有时我们会突然想把一个正在运行中的程序放到后台去执行。由于事先没有准备,很可能忘记重定向输出到文件或者忘记使用screen、nohup一类的命令来跑。下面介绍一个处理这种问题的小技巧。
- 获得程序的进程号(PID)
- 使用gdb调试这个进程。(gdb -p xxx)
- 通过close系统调用关闭标准输出(STDOUT)或者标准错误(STDERR)
- 通过creat系统调用打开一个文件并将其文件描述符通过dup2系统调用复制给标准输出或者标准错误
- 退出调试器。现在可以将程序通过“CTRL+z”, “bg”, “disown“放入后台运行了。具体方法请参考: 让程序在后台运行的几个简单方法
详细操作步骤截图如下
nby:~ $ ps awux | grep [t]op
jianingy 4753 0.1 0.0 2308 1008 pts/2 S+ 17:44 0:00 top -b
nby:~ $ gdb -p 4753
GNU gdb (GDB) 7.0
…
0xb776a424 in __kernel_vsyscall ()
(gdb) call close(1)
$1 = 0
(gdb) call dup2(creat(”/tmp/log”, 0600), 1)
$2 = 1
(gdb) quit
使用本文附件中提供的脚本,可以方便的使用这种方法进行重定向。
参考文献
编译的时候定义宏:-D_LARGEFILE64_SOURCE
主机认证的设置上并不复杂,考虑全面就能很容易搞定。我们还是先来简单描述下环境。这里我们假设主机admin是管理节点,我们的目标是admin上的所有用户都能通过主机认证从admin节点上登陆其他机器而不需要输入密码。首先,来看看需要修改的文件有那些以及他们各自的作用。
- admin上的/etc/ssh/ssh_known_hosts: 系统级别的主机公钥文件,需要将你想登陆主机的公钥全部放在这个文件里。
- 其他机器上的 /etc/ssh/sshd_config :ssh服务进程的配置文件,稍后我们要在这个文件里开启服务进程对主机认证的支持。
- admin上的 /etc/ssh/ssh_config: 系统级别的ssh客户端配置文件,我们需要在里面打开客户端对主机认证的支持。
- 其他机器上的 /etc/hosts.equiv : 允许通过主机认证登陆本机的主机名称(域名或者IP)以及用户名称。(有点拗口,但是就是这个逻辑)
我们先来配置admin上的/etc/ssh/ssh_known_hosts。该文件应该包含admin希望登陆的所有机器的rsa或者dsa公钥。为了获取这个公钥我们可以使用openssh提供的工具“ssh-keyscan”:http://www.linuxmanpages.com/man1/ssh-keyscan.1.php 。下面的例子演示了如何获得几个机器的rsa公钥。
ssh-keyscan -t rsa ls101 ls102 ls103 #获取几个机器的公钥,并输出在屏幕上 sort <(ssh-keyscan -t rsa ls101 ls102 ls103) <(cat /etc/ssh/ssh_known_hosts) | uniq #获取几个机器的公钥并和原有的公钥列表做简单排重
接下来我们要在其他机器上开启ssh服务进程对主机认证的支持。编辑文件/etc/ssh/sshd_config,进行下面的设置:
HostbasedAuthentication yes #开启主机认证 IgnoreRhosts no # 允许用户自己设置 ~/.shosts 和 ~/.rhosts。该设置对主机认证中root用户的登陆有关键作用。
修改好ssh服务进程的配置文件后,我们需要重新启动一下ssh服务以应用最新的设置。
在各个ssh服务器准备完毕后,我们来配置admin上面ssh客户端参数。编辑文件/etc/ssh/ssh_config,进行下面的设置:
Host *
HostbasedAuthentication yes # 开启主机认证
EnableSSHKeysign yes # 开启SSH签名支持
由于主机认证会用到一个叫“ssh-keysign”:http://www.linuxmanpages.com/man8/ssh-keysign.8.php 的程序来进行认证,因此在ssh_config中开启对SSHKeysign的支持是必要的。
最后,我们将admin的域名加入到每个机器的 /etc/hosts.equiv 文件中。现在,在admin上除root用户外的所有用户都可以通过主机认证登陆其他机器了。为了让root用户也有这样的便利,我们还需要在其他机器的/root中加入文件.shosts。其内容和/etc/hosts.equiv相同。至此,我们已经成功完成了ssh主机认证的全部配置。