在Linux Ubuntu下把PDF扫描档转换为可编辑文本文件

本教程所用环境
* 机器:普通电脑 ThinkPad E470c
* 系统:Ubuntu 16.04 LTS
背景
    有一个朋友找我帮忙,需要把他在网上下载的一份pdf文件转换为word文档。刚开始我认为这个操作很简单,网上应该很多成熟的方案,果然,随便找找,就找到很多免费的在线转换网站。
    本以为事情结束了,native :) ,他下载的是一份扫描档pdf文件(每一页类似于一张文件),在线网站还没有找到能直接把pdf扫描档转换为word文档的,花了九牛二虎之力也没有发现简便的方法,最后我觉得应该借助Linux的工具来解决这件事(Windows有收费软件直接解决,更方便)。
方法

概括:先把pdf扫描档转换为图片,然后把图片转换为txt文本文档,最开始找到了一个软件pdfocr,但好像16.04安装不了。

  • 把pdf扫描档转换为图片

    这一步需要借助工具包poppler-utils,这个工具包里含有很多处理pdf文档的工具。

    1. 检测你是否已经安装过此工具dpkg -s poppler-utils,大多数Ubuntu默认已经安装了。如下图:
      pdf转换工具
      可以看到,有很多命令(pdftotext,pdftohtml,pdfimages等)供我们使用,如果是正常pdf文档是可以直接转换为txt文本的,命令:pdftotxt xx.pdf xx.txt

    2. 如果没有安装,则使用sudo apt install poppler-utils命令安装。

    3. 把pdf扫描档转换为png图片:pdfimages xxx.pdf -png 你的/存放/图片/目录/路径,如果你的pdf有多页,那么每页会自动生成一张图片。

  • 把图片转换成txt文档

    这一步需要借助工具是Tesseract,这个软件已经大名顶顶了。

    1. 安装命令sudo apt install tesseract-ocr tesseract-ocr-chi-sim,前一个是软件,后一个是中文简体语言包。语言包有很多,我只安装了中文简体,其它语言包如下图:
      Tesseract语言包

    2. cd进入你的/存放/图片/目录/路径

    3. 先处理单个文件试验一下:tesseract xx.png output -l chi_sim,参数:-l(L字母小写,language首字母) chi_sim是需要识别的语言包,成功后,当前目录下就会多一个output.txt文件,里面内容就是图片上的文字,但要注意,如果图片质量不好,那么识别出来的内容会有挺大的偏差。

    4. 批量处理命令:

    for i in `ls *.png | awk -F '.' '{print $1}'`;do tesseract $i.png $i -l chi_sim;done
    
ps:如果你有更好的方法,可以微信或邮件告知哟!

ETP(熵)币在Ubuntu下的挖矿教程

本教程所用环境
* 机器:普通电脑 ThinkPad E470c
* 系统:Ubuntu 16.04 LTS
步骤
  • 下载元界钱包
    • 官方博客有一篇元界(Metaverse)安装与使用手册,这里面涵盖了Windows,MacOSX,Linux系统下钱包下载,安装,使用的详细说明,可能在一些细节与实际不同,摸索一下就会掌握,如有问题,欢迎在评论下留言,或者直接联系我。
  • 下载挖矿软件
    1. 英语过关的请直接看这篇文章Ethereum GPU Mining on Linux How-To,这里有如何下载以太币挖矿软件和显卡驱动。建议:最好结合我下面的一起操作 🙂 。
    2. 我结合自己的实践来大概说明一下:
      • 用以下命令增加挖矿软件安装包的源:
      sudo apt-get install software-properties-common
      sudo add-apt-repository ppa:ethereum/ethereum
      sudo apt-get update
      

      如果是在Debian 8(在Ubuntu上你可以跳过此步骤)上你需要使用以下命令替换源名称:

      sudo sed 's/jessie/vivid/' -i /etc/apt/sources.list.d/ethereum-*.list
      sudo apt-get update
      
      • 安装ethereum, ethminer 和 geth:
      sudo apt-get install ethereum ethminer geth
      

      geth好像是用来生成以太币钱包地址的,对于我们将要挖ETP来说,应该没有用处。因为我们在安装好元界钱包,注册登录后会有ETP的地址。

      • 安装显卡驱动:
        首先,需要知道自己电脑的显卡型号,然后去官方下载对应的驱动软件。比如我的显卡是NVIDIA,电脑系统是Linux(Ubuntu 16.04 LTS)64位,使用的是GeForce 920。到N卡驱动官方网站搜索下载自己需要的驱动。

      然后,安装显卡驱动所需要的依赖:

      sudo apt-get install linux-headers-amd64 build-essential
      

      linux-headers-amd64 这个包好像已经废弃了,不过不影响后续安装。

      最后,安装驱动。显卡驱动安装必须在Linux文本模式,所以:

      第一步,Ctrl+Alt+F1切换到tty1,使用命令sudo service lightdm stop关闭 X-Window.

      第二步,给下载的驱动增加执行权限,然后运行(注:请先看完以下内容在运行).

      chmod +x NVIDIA-Linux-x86_64-367.35.run
      sudo ./NVIDIA-Linux-x86_64-367.35.run
      

      第三步,安装完成后,重新启动X-Windowsudo service lightdm start,然后Ctrl+Alt+F7进入图形界面;

      我在安装完成后遇到一个坑,在图形模式下,登录界面输入密码后依然跳转回登陆界面,无限循环。经过搜索,用以下方法重新安装解决:

      sudo ./NVIDIA.run -no-x-check -no-nouveau-check -no-opengl-files
      -no-x-check:安装驱动时关闭X服务
      -no-nouveau-check:安装驱动时禁用nouveau
      -no-opengl-files:只安装驱动文件,不安装OpenGL文件
      

      这样再reboot,就不会出现循环登录的问题。

      如果没有解决请参考这篇blog.

    3. 寻找矿池挖矿。

      我使用的是火池,挖矿命令:ethminer -F http://get.etp.huopool.com:8888/MEEihkdp6w7JKVA6hyKVGU9FomAV4G7jYP -G --farm-recheck 200

      由于我用的是个人电脑,所以算力很低 🙂 ,仅为了试验一下而已,下面是挖矿和矿池收益截图:
      挖矿图
      收益图

总结
  • 以上内容如果对你有帮助且你还有闲余的ETP的话,可以对我进行打赏
    我的ETP地址:MEEihkdp6w7JKVA6hyKVGU9FomAV4G7jYP
    我的博客地址:http://blog.blianb.com

自动化检测PHP语法和编程规范(Git pre-commit)

自动化检测PHP语法和编程规范

使用到的知识点:

  • 命令php -l检测文件语法,可以通过php -h查看PHP CLI支持哪些操作,如下:.
[:~]$ php -h
Usage: php [options] [-f] <file> [--] [args...]
   php [options] -r <code> [--] [args...]
   php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
   php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
   php [options] -S <addr>:<port> [-t docroot] [router]
   php [options] -- [args...]
   php [options] -a

  -a               Run interactively
  -c <path>|<file> Look for php.ini file in this directory
  -n               No configuration (ini) files will be used
  -d foo[=bar]     Define INI entry foo with value 'bar'
  -e               Generate extended information for debugger/profiler
  -f <file>        Parse and execute <file>.
  -h               This help
  -i               PHP information
  -l               Syntax check only (lint)
  -m               Show compiled in modules
  -r <code>        Run PHP <code> without using script tags <?..?>
  -B <begin_code>  Run PHP <begin_code> before processing input lines
  -R <code>        Run PHP <code> for every input line
  -F <file>        Parse and execute <file> for every input line
  -E <end_code>    Run PHP <end_code> after processing all input lines
  -H               Hide any passed arguments from external tools.
  -S <addr>:<port> Run with built-in web server.
  -t <docroot>     Specify document root <docroot> for built-in web server.
  -s               Output HTML syntax highlighted source.
  -v               Version number
  -w               Output source with stripped comments and whitespace.
  -z <file>        Load Zend extension <file>.

  args...          Arguments passed to script. Use -- args when first argument
                   starts with - or script is read from stdin

  --ini            Show configuration file names

  --rf <name>      Show information about function <name>.
  --rc <name>      Show information about class <name>.
  --re <name>      Show information about extension <name>.
  --rz <name>      Show information about Zend extension <name>.
  --ri <name>      Show configuration for extension <name>.


  • 安装PHP编程规范工具php-cs-fixer,可以在GitHub上查看详细信息.
    1. 下载:wget http://cs.sensiolabs.org/download/php-cs-fixer-v2.phar -O php-cs-fixer
    2. 给予执行权限:sudo chmod a+x php-cs-fixer
    3. 把文件移动到自己喜欢的目录,我一般是放在/usr/local/bin下:sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer

  • 利用Git的钩子pre-commit达成commit前自动检测功能.
    这个钩子,顾名思意就是在git commit之前会触发,此钩子结合网上和朋友的写法,感谢他们.
    首先,点击查看这个文件,复制文件内容.
    然后,进入到自己的项目下git钩子目录:cd path/to/your/project/.git/hooks,复制pre-commit.sample文件并重命名:cp pre-commit.sample pre-commit,把文件内容替换为上一步复制的内容.
    最后,每次commit时就会先检测语法和规范是否正确,不正确会提示文件名和你需要规范代码格式的命令,简单测试如下图:.
    php-cs-fixer pre-commit

ubuntu apt update时提示缺少public key

问题原因:

apt包管理系统具有一组可信密钥,用于对每个包进行身份验证,确定每一个包是否可以信任的安装在系统上。有时,系统没有所有需要的密钥进行验证,所以会遇到这个问题。幸运的是,系统会列出缺失的每个密钥的信息,只需要把这个密码添加到apt密钥管理器中,以便它可以验证包就可以了.

  • 使用命令sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys xxxxxx
    xxxxxx 代表系统提示你缺少的密钥,我缺少的密钥是40976EAF437D05B5,使用后结果如下图,然后再sudo apt update就没有问题了.
    增加密钥

Ubuntu安装Chrome稳定版(google-chrome-stable)

Ubuntu安装Chrome稳定版(google-chrome-stable)

  • 推荐PPA方法,免翻墙
  1. wget -q -O - https://raw.githubusercontent.com/longhr/ubuntu1604hub/master/linux_signing_key.pub | sudo apt-key add

  2. sudo sh -c 'echo "deb [ arch=amd64 ] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list

  3. sudo apt-get update

  4. sudo apt-get install google-chrome-stable

  • 安装Google Chrome unstable 版本:
    sudo apt-get install google-chrome-beta
  • 安装Google Chrome beta 版本:
    sudo apt-get install google-chrome-unstable

ubuntu个人机使用到的一些软件

个人目前使用ubuntu,主要是用来进行web开发,在安装完ubuntu后,可以看到默认是有浏览器firefox,办公套件LiBreOffice,电邮客户端Thunderbird Mail,好了接下来说说我为了个人需要安装一些软件,仅供参考。
  • 通迅相关
  1. QQ International 这个不是官方发布的客户端,具体开发者我也不知道是谁,但我在使用ubuntu 13.x 的时候就使用的这个客户端,到目前使用的16.04LTS版都没有出现过问题,应该具备QQ2013的所有功能,办公使用足够了。如果有人需要这个deb包可以留言回复,我会发送文件到你邮箱并协助你安装。注意:需要先安装Wine(sudo apt install wine).

  2. Electronic WeChat 微信客户端,这个也不是腾讯官方发布的客户端,是一个开源项目。具体安装方法在github上面写的非常清楚,当然,如果你有不明白的地方,也可以回复我,我会尽我所能帮助你。


  • 输入法
  1. fcitx ubuntu有自带的ibus,不过我更喜欢使用fcitx,使用它的五笔拼音,打字嗖嗖的。

  • 浏览器
  1. google-chrome-stable安装文档

  2. chromium chromium是开发版,各种新功能都会有,但ubuntu的包却是很落后,刚开始我用的是chromium,后台更换为了chrome。


  • 音乐
  1. 厉害了word我的网易,网易云音乐有专门ubuntu对应版本的包,一般人我不告诉他,16.04LTS亲测能用,一直使用的网易云音乐

  • 虚拟机
  1. VirtualBox 不管是为了在Linux上使用Windows(Linuxer的痛)还是为了统一开发环境使用vagrant,都需要安装VirtualBox。

  • 数据库客户端
  1. emma 最开始我一直使用的emma,界面简洁,查看方便,能使用SQL语句,相对功能会少一些,且apt安装后有个小问题,不支持中文显示,解决方法

  2. navicat for mysql navicat对比其它Linux下Mysql客户端确实强大太多了,常用的各种功能自不在话下,还支持视图,函数,事件等等,下载解压后进入目录,运行脚本启动即可,但navicat也有个小问题,它不是免费的,只有15天试用期,不过你可以到目录.navicat下把user.reg删掉(cd ~/.navicat/),然后重启,你就又有15天的试用期了。


  • markdown编辑器
  1. Haroopad 界面美观,清晰,支持实时预览等很多功能,还有我最舒适的vim操作模式,我只使用了它的markdown语法编辑功能,目前只能导出HTML格式文件,下载后点击安装即可,此文就是通过这个软件编写的。

  2. Atom A hackable text editor for the 21st Century,Atom编辑器功能更强大,放到这个模块下面,其实是不合理的,因为它不仅仅是一个markdown编辑器,更是一个功能强大的文本编辑器,由于我使用的是(G)vim,所以只是把Atom当作写markdown文档的工具在使用,使用Atom的原因是家里电脑使用的是ArchLinux,ArchLinux上没有Haroopda的包,不得已找到了Atom,才发现它也非常强大,有超多第三方插件可供选择使用,除了自带插件,我搜索下载了支持vim的vim-mode,md文件转换为pdf的markdown-pdf,此次更新文件使用Atom修改。


  • 图片编辑工具
  1. GIMP Image Editor 是一个很强大的图片编辑工具,据说是Linux下的PhotoShop,当时我需要制作一个自己博客的logo,此网站的logo就是使用这个软件制作的,最后就找到了这个软件,目前使用了此软件很小一部分功能。

  2. gnome-screeshot 顺带说一下gnome自带的截图工具,我自己在系统设置,键盘,快捷方式里设置了它的快捷键ctrl + alt + a对应gnome-screenshot -a,此后截图就非常方便了。


  • 开发相关
  1. PHP7 Nginx mariaDB就不用说了.

  2. vim-gtk 我之前使用的vim-gnome编辑器,后来在每次关闭vim时,都会提示一个错误,在搜索这个问题时,看到Stack Overflow上别人推荐使用vim-gtk,使用下来一点不差.

  3. Composer PHP 的一个依赖管理工具,安装文档.


  • 科学上网
  1. Shadowsocks科学上网工具,结合浏览器插件SwitchyOmega或是终端代理工具ProxyChains.注意:直接apt install shadowsocks安装的可能不支持rc-md5,可先安装pip(sudo apt install python-pip),然后用pip安装(pip install shadowsocks).

  • 系统设置
  1. 使用monaco字体,参考github一篇文档,clone或下载文件,请仔细阅读README.md,最后找到其中为Ubuntu定制的安装脚本。运行命令./install-font-ubuntu.sh https://github.com/todylu/monaco.ttf/blob/master/monaco.ttf?raw=true,文档里提供的地址已失效。

  2. Unity Tweak Tool设置系统工具,可以在Ubuntu应用商店搜索安装,安装后可以使用第一步里安装好的monaco字体.


  • 其它相关问题
  1. 配置thunderbird,qq企业邮箱服务时要补全为exmali.qq.com

  2. 字的问题,一些字体显示不正确。
    /ect/honts/conf.d/64-language-selector-prefer.conf 有以下内容:

<alias>
      <family>sans-serif</family>
      <prefer>
         <family>Noto Sans CJK JP</family>
         <family>Noto Sans CJK SC</family>
         <family>Noto Sans CJK TC</family>
      </prefer>
   </alias>
   <alias>
      <family>monospace</family>
      <prefer>
         <family>Noto Sans Mono CJK JP</family>
         <family>Noto Sans Mono CJK SC</family>
         <family>Noto Sans Mono CJK TC</family>
      </prefer>
   </alias>

你要做的就是把 JP 换到最后面,然后重启电脑。

用fbterm在tty下实现输入中文字符

使用fbterm等组件实现Linux终端下中文文本的显示和输入

系统环境:Ubuntu14.04(64bit)

第一步:安装相关软件:

apt-get install fbterm fcitx im-config fcitx-frontend-fbterm

第二步:进行相关配置:

默认情况下非root用户不能运行fbterm命令,因此要执行如下命令

gpasswd -a user viedo

来使普通用户user能成功使用fbterm

然后执行

chmod u+s /usr/bin/fbterm

接着,修改~/.fbtermrc

input-method=fcitx-fbterm

保存。

重启电脑,至此,可以在tty下通过执行fbterm命令来实现中文的显示,可以使用中文输入法在tty输入中文,CTRL+Space实现中英文输入法的切换。

待解决问题:

1:root用户无法使用fcitx,fcitx-fbterm

2:中文输入法切换到英文输入法时终端显示冗余字符

3:fbterm下屏幕唤醒时可能产生错误

4:tty登录时自动使用fbterm

朋友的配置

(#当不在X系统下的时候,启动fbterm 加载输入法 并且加载了tmux。完美解决。
#同时把mplayer设置视频输出为fbdev2
#tmux bind c 建新窗口,v 垂直分pane s水平分,w列出已经打开的窗口,0 1 2 选择不同的窗口。
if [ “$DISPLAY” = “” ]; then
#if [ “$TERM” = “linux” ]; then
SHELL=tmux fcitx-fbterm-helper -l
#export TERM=fbterm
alias tmplayer=’/usr/bin/mplayer -vo fbdev2′
#export TERM=screen-256color
fi

)

5:init3下不能使用fcitx

6:init3下屏幕关闭,唤醒。睡眠,休眠等问题。

总而言之,终端下使用fbterm+fcitx-fbterm来解决中文显示和输入的问题是现在使用的很多的一种方案,虽然配置起来问题多多,最终实现也会有一些小bug,但是已经可以满足基本使用需要了。因此我暂时采用这个方案,另外期待coder们能在这个问题上开发出更好的解决方案来。

Apache虚拟主机指南(注:好像是从ubuntu官网wiki摘来的)

http://wiki.ubuntu.org.cn/Apache%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E6%8C%87%E5%8D%97

启用与停用站点的方法

a2ensite 站点名
a2dissite 站点名

[编辑]基于名字的(通过域名来区分)的虚拟主机

安装好apache以后默认有一个叫default的虚拟主机。新建虚拟主机时可以直接复制默认虚拟主机的配置文件,在其基础上修改新虚拟主机的配置参数。

#copy /etc/apache2/site-available/default /etc/apache2/site-available/sitename

[编辑]测试环境

  • 操作系统:Ubuntu Server 12.04 LTS
  • 测试机地址:10.39.6.59
  • 测试机域名:*.example.com

[编辑]基本配置

我们都知道,如果我们想在单台机器上设置多个域名或主机名时,我们就要用到基于名称的虚拟主机了。那么要如何进行设置呢?这就是本指南想解决的问题了。在 Ubuntu 的 /etc/apache2/ 目录下有个 Apache2 的主配置文件 apache2.conf。在该文件中我们可以看到下列字段:

# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/[^.#]*(12.04版本里无[^.#]*)

这行的意思表明该文件包含了 /etc/apache2/sites-enabled/ 目录中文件名不含 “.” 或 “#” 这两个字符的所有文件。而当我们列出该目录的文件时,发现只有一个 000-default 的软链接文件,实际连接的是 /etc/apache2/sites-available 目录中的 default 文件,不难看出该文件的文件名中并不包含 “.” 或 “#”。所以这个文件当然是要被配置文件 apache2.conf 所包含的了。打开该文件,发现它其实是一个虚拟主机的配置文件,不过由于该文件中的虚拟主机为 *,所以它实际上是一个通用配置文件。如果我们要建立虚拟主机的话,那么就要把该文件改成如下所示:

<VirtualHost *:80>
ServerName www.firehare.com
ServerAdmin admin@mail.firehare.com

DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# Commented out for Ubuntu
#RedirectMatch ^/$ /apache2-default/
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined
ServerSignature On

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

下面我们来分析一下上面这段设置中与虚拟主机有关的设置语句:

  • `NameVirtualHost :80`:表示我们要做的是一个基于名称的虚拟主机,监听的端口为80.
  • `<VirtualHost *:80> 和 </VirtualHost>`:表示在其中的是一个虚拟主机的配置。注意如果上面的字段指定了端口号,这里也要指定
  • `ServerName www.firehare.com`:设置虚拟主机的域名,www.firehare.com可以是你注册的任何域名
  • `ServerAdmin admin@mail.firehare.com`:设置该虚拟主机网管员的邮件
  • `DocumentRoot /var/www/`:设置该虚拟主机的主目录路径
  • `ErrorLog /var/log/apache2/error.log`:设置该虚拟主机的出错信息
  • `CustomLog /var/log/apache2/access.log combined`:设置该虚拟主机的访问信息

这样我们就配置了一个虚拟主机 www.firehare.com。但由于这是缺省配置,所以在 Apache2 重启之后,无论你输入 DNS 服务器中指向这个主机的任何域名,都会被导向 www.firehare.com 这个缺省配置所指向的 /var/www 这个目录的。除非该域名被其他虚拟主机配置所用,比如我们还配置了 edunuke.firehare.com 指向本机,且配置了相应的虚拟主机,这样的话,输入域名 edunuke.firehare.com 就会被对应该域名的目录中。

[编辑]进一步说明

为了说明清楚 我们再添加一个虚拟主机站点 example.com,首先到 /etc/apache2/sites-available/ 目录中建立一个文件 edunuke,编辑该文件:

<VirtualHost *:80>
ServerName edunuke.example.com
ServerAdmin edunuke@mail.example.com
DocumentRoot "/var/www/edunuke/"
ErrorLog "/var/log/apache2/edunuke_errors.log"
CustomLog "/var/log/apache2/edunuke_accesses.log" common    
</VirtualHost>

设置的具体含义同上面的相似,这是我就不再多说了。然后再运行命令:

sudo a2ensite edunuke

这样的话,虚拟主机站点 edunuke.example.com 就已经安装好了。这时你也可以在 /etc/apache2/sites-enabled/ 目录中发现多了一个到 /etc/apache2/sites-available/edunuke 的软链接。接下来就是将 Apache2 重启来使虚拟主机站点运行起来:

sudo /etc/init.d/apache2 restart  这里可以使用reload 重新加载

这样你在浏览器上输入 edunuke.example.com 的话,就会被指向 /var/www/edunuke 目录了,而输入其他指向本机的域名则都会指到缺省配置中的 /var/www 目录中。熟悉 Apache2 的朋友会问为什么这样麻烦,放在一个文件中不也是可以吗?为什么要用两个文件呢?其实很简单,因为如果我要对 edunuke 站点进行维护时,我只要运行命令:

sudo a2dissite edunuke
sudo /etc/init.d/apache2 restart

即可,这样既可以维护 edunuke 这个站点,同时还不影响其他站点的正常运行。

[编辑]高级配置

上面谈了一下简单的虚拟主机配置方法。这个基本上能满足我们大部分的需要。但如果要是安装 Zope+Plone 的话,上面的这点设置是远远不够的,由于 Zope+Plone 结构所采用的端口并非是80端口,所以我们还得做端口重定向。为了能够做这个,我们得激活 Rewrite 和 Proxy 两个模块。激活模块很简单,同站点配置目录一样,在 Apache2 中也有两个模块配置目录:mods-available 和 mods-enabled。在 mods-available 目录中的是所有可用的模块,而在 mods-enabled 目录中的则是已被安装到 Apache2 中的模块。由于在 mods-available 目录中已经有了 Rewrite 和 Proxy 模块的配置引导文件,所以只需要简单地将其安装到 Apache2 中即可。使用命令:

sudo a2enmod rewrite
sudo a2enmod proxy

然后,添加虚拟主机站点 plone.example.com,同 edunuke 站点创建相似在/etc/apache2/sites-available/ 目录中建立一个文件 plone。显然这个文件名中是没有 “.” 或 “#” 这两个字符的了。然后编辑该文件:

<VirtualHost plone.example.com:80>
ServerName plone.example.com
ServerAdmin plone@mail.example.com
ErrorLog "/var/log/apache2/plone_errors.log"
CustomLog "/var/log/apache2/plone_accesses.log" common

RewriteEngine on
RewriteRule ^/(.*) http://127.0.0.1:8081/VirtualHostBase/http/plone.firehare.com:80/plone/VirtualHostRoot/$1 [L,P]

<Proxy *>
Order Deny,Allow
Deny from all
Allow from all
</Proxy>

</VirtualHost>

这样就安装好了 plone.example.com 虚拟主机站点,可以在浏览器中地址栏中输入 http://plone.example.com 就可以重定向到 Zope+Plone 站点去了。

[编辑]基于端口的虚拟主机

<VirtualHost *> DocumentRoot /var/www/work/phabricator/webroot RewriteEngine on RewriteRule ^/rsrc/(.*) – [L,QSA] RewriteRule ^/favicon.ico – [L,QSA] RewriteRule ^(.*)$ /index.php?__path__=$1 [B,L,QSA] </VirtualHost>

14.10升级15.04时,不能扩展到第二显示器的问题解决方法

今天将Ubuntu从9.10升级到10.04后显卡驱动遇到了点小麻烦:不能像以前那样安装Nvidia官方驱动了。据说是因为10.04自带了开源的nouveau驱动所至。因此要手动安装官方驱动先得卸载ubuntu 10.04安装时缺省提供的这个驱动。
折腾一番后安装成功,简单总结一下安装官方驱动的两个方法:手动安装和apt-get安装。
一、手动安装官方驱动和开发库
实践后发现 这篇文章 提供的办法最好:
0. 去Nvidia官方网站下载最新的驱动
这里 选择你的平台对应的驱动。
今天最新的版本是195.36.24

1. 首先将nouveau驱动放入黑名单:

Sh代码
  1. sudo vi /etc/modprobe.d/blacklist.conf

增加一行
blacklist nouveau

2. 卸载官方驱动nouveau

Sh代码
  1. sudo apt-get –purge remove xserver-xorg-video-nouveau

3. 然后重启:

Sh代码
  1. sudo reboot

重启后会发现界面很粗糙

4. 清除nvidia相关的软件(如果有的话)

Sh代码
  1. sudo apt-get –purge remove nvidia-*

5. 退出x界面进入命令行控制台:

Sh代码
  1. sudo init 3
  2. sudo service gdm stop

6. 运行安装

Sh代码
  1. sudo sh NVIDIA-Linux-x86_64-195.36.24-pkg2.run

7. 启动x界面

Sh代码
  1. sudo service gdm start

二、apt-get安装官方驱动库
手动安装这种方式在官方更新库后每次都得手动来一遍,所以最方便的还是apt-get安装

《Ubuntu Gamer》介绍了 apt-get安装最新显卡驱动到办法
对于最新的Nvidia二进制驱动:
1. 添加apt-get源
对于12.10之前的版本

Sh代码
  1. sudo add-apt-repository ppa:ubuntu-x-swat/x-updates

13.04后的版本 

Sh代码  
  1. sudo add-apt-repository ppa:xorg-edgers/ppa  

如果出现错误
Cannot add PPA: ‘ppa:xorg-edgers/ppa’.
Please check that the PPA name or format is correct.

这可能是网络(如防火墙)的原因

2. 在线安装驱动

Sh代码
  1. sudo apt-get update
  2. sudo apt-get install nvidia-current nvidia-current-modaliases nvidia-settings

13.10后不再有modaliases了 

Sh代码  
  1. sudo apt-get update  
  2. sudo apt-get install nvidia-current nvidia-settings  

3. 从事GPU开发的可能还需要装上cuda和openCL库的支持:

Sh代码
  1. sudo apt-get install nvidia-current-dev

4. 安装cudatoolkit获取相关开发工具,如nvcc
去官方网站下载安装包,略

其它:对于最新的ATI/AMD二进制驱动的apt-get安装
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
sudo apt-get update
sudo apt-get install fglrx

http://article.yeeyan.org/view/163202/140715

其它常见错误:
安装重启后空屏(Blank screen),只显示鼠标。
解决办法是,设置grub:

1. 重启时按Shift键进入恢复模式(Recovery Mode),BTW:有的机器可能需要先进入BIOS,然后启动
2. 按E键修改启动参数,将quiet splash改成nomodeset
不过每次重启都要这样修改很麻烦,可以
3. 进入“系统配置”,点击“软件更新”,然后在“附加驱动”中随便选一款NVIDIA驱动,就好了

详见:
http://askubuntu.com/questions/162075/my-computer-boots-to-a-black-screen-what-options-do-i-have-to-fix-it

参考:
http://www.ubuntugeek.com/howto-install-nvidia-drivers-manually-on-ubuntu-10-04-lucid-lynx.html
http://www.wretch.cc/blog/gegemini/8908293