解决Dota2在Archlinux下的各种疑难杂症

Posted on

V社的steam平台在Linux下出了这么多年还是没解决输入法的问题.本身官方也就只支持Ubuntu,所以在其它发行版也就难免会有各种各样的问题.容我慢慢道来

Alt键无法发信号

Dota2只能通过Alt和鼠标左键的配合发信号.无法像Dota一样可以单纯使用鼠标发信号.但是有些用户可能发现自己无法发信号. 原因在于你使用的窗口管理器已经为 Alt和鼠标左键绑定了事件,所以你得取消窗口管理器的事件绑定,例如openbox需要修改配置文件rc.xml找到鼠标事件并注释掉事件绑定的内容.

双显卡启动游戏

对于很多双显卡的机器,平时运行使用集显但是在玩游戏的时候肯定要使用独显才能充分享受游戏的乐趣.所以启动游戏的时候就必须设置启动参数才行. 启动参数设置为vblank_mode=0 primusrun %command% 前提是你要装上 primusrun.

Dota2没声音

如果你只使用的ALSA没使用PulseAudio可能会遇到这个问题,原因是因为Steam自己的库文件和系统的冲突.只要把Steam的相关ALSA库删掉即可. 删掉下面的文件夹 和 libasound.so.*即可搞定.

    ~/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/
    ~/.steam/steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/

参考:

Steam

Dota 2

tagged: linux

Archlinux和Win 10 在 UEFI下 双启动

Posted on

实验室给配备了一台高性能的台式机,但是UEFI本身关不掉.而且有些操作还是离不开Windows,于是便折腾Win10和Archlinux的双启动. 安装双系统基本上都是先装Windows再装Linux的.切忌这一点,安装顺序反了会很麻烦.

Win10配置

要安装Archlinux,首先得对Windows进行相应的配置才行.Windows的安装就不用我介绍了,大家基本都会的.

UEFI Secure Boot

首先要进入BIOS把这个参数关掉,如果BIOS里面有快速启动之类的也关掉.

Fast Start-Up

把Win10的这个加速系统开机的配置禁用掉,应该在电源管理界面可以禁用的.因为切换系统的话这个功能会导致你丢失数据.

制作Arch的U盘安装盘

如果你简单的使用dd命令就可以成功安装那是最好不过的了,但是有时候事与愿违...

假设你用dd刻录好之后,然后用电脑U盘启动,出现启动菜单 选择 Arch Linux archiso x86_64 UEFI CD 之后遇到黑屏的问题.

你可以先试试禁用KMS

如果这个不行的话,那说明你得采用第二个办法了,使用 GRUB 进行引导启动盘.

手动制作启动盘

因为要使用GRUB进行引导,所以不能使用dd刻录,dd刻录的U盘有写保护,我们无法修改.我们得手动制作安装盘

    # mkdir -p /mnt/{iso,usb}
    # mount -o loop archlinux-2015.10.01-dual.iso /mnt/iso
    # mount /dev/sdXn /mnt/usb
    # cp -a /mnt/iso/* /mnt/usb
    # sync
    # umount /mnt/iso

光是拷贝还不行,我们还得有引导信息. 使用syslinux进行引导

    # cp -r /usr/lib/syslinux/bios/*.c32 /mnt/usb/arch/boot/syslinux/       ## copy ALL the *.c32 files from /usr/lib/syslinux/bios/, DO NOT SYMLINK
    # extlinux --install /mnt/usb/arch/boot/syslinux/

如果你的U盘是MBR格式的,记得使用 fdisk把当前分区设置为活动分区. fdisk /dev/sdX 然后输入 a 命令,选择要设置的活动分区.

还有 U盘寻找启动分区是根据U盘的label标签来寻找的,确保你的卷标是 ARCH_2015XX 格式. 如果你不想用卷标的话,还可以用UUID. 查找你U盘的UUID的命令是 sudo blkid.

制作GRUB standalone

这才只是手动制作好了启动U盘.你还要切换成 GRUB引导.通过下面的命令制作出一个带有所有模块的GRUB引导文件.

    grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="part_gpt part_msdos" --fonts="unicode" --locales="en@quot" --themes="" -o "/tmp/grubx64_standalone.efi"

生成的grubx64_standalone.efi就是我们需要的文件.

然后回到我们的那个启动U盘.备份EFI/boot/loader.efi 成 EFI/boot/gummiboot.efi.

拷贝两份grubx64_standalone.efi. 分别命名为EFI/boot/loader.efi和EFI/boot/bootx64.efi.

然后新建一个 EFI/boot/grub.cfg 把 wiki上的内容拷贝过去.记得替换掉ARCH_YYYYMM的值.

然后这样就应该用 grub启动了. 如果你这样还是启动失败了, 得到了类似 invalid magic number的错误.那只能说你跟我一样倒霉.

用GRUB挂载ISO进行引导

既然我们的GRUB是好的,那我们就用GRUB直接引导一个完整的ISO文件. 参考我之前发布的文章使用GRUB2引导ISO镜像.

在原有的grub.cfg上添加一个menuentry.并把完整的ISO镜像拷贝到U盘里面.记得替换 UUID和文件名.

    menuentry "Archlinux-x86_64.iso" --class iso {
      set isofile="/archlinux-2013.04.01-dual.iso"
      search -s -f -n /archlinux-2013.04.01-dual.iso
      probe --set=DB7B-2C3D -u $root
      loopback loop /archlinux-2013.04.01-dual.iso
      linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201304 img_dev=/dev/disk/by-uuid/DB7B-2C3D  img_loop=$isofile earlymodules=loop
      initrd (loop)/arch/boot/x86_64/archiso.img
    }

这次总算可以引导出arch的安装环境了.接下来就是按照正常的步骤进行安装了. 在Win下直接使用Rufus刻录就没那么折腾了.

安装Archlinux之后配置双系统的GRUB

到最后我们要安装GRUB到UEFI上.如果你提前安装过Windows,那么你肯定有EFI分区的.

    # pacman -S dosfstools grub efibootmgr
    # mkdir /boot/efi
    # mount /dev/sda1 /boot/efi

把EFI分区挂载到系统上,然后安装GRUB.

    # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck
    # grub-mkconfig -o /boot/grub/grub.cfg

生成的grub.cfg里面并没有Windows的启动菜单,我们需要手动写.

    menuentry "Microsoft Windows 10" {
        insmod part_gpt
        insmod fat
        insmod search_fs_uuid
        insmod chain
        search --fs-uuid --set=root $hints_string $fs_uuid
        chainloader /EFI/Microsoft/Boot/bootmgfw.efi
    }

$hints_string的值是命令# grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi的输出.

$fs_uuid的值是命令# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi的输出.

替换这俩值,保存并退出即可.到此双系统配置完毕.最后别忘了进BIOS把第一启动项目设置为GRUB.

参考

Preinstalled Windows 8.1 and Arch Linux dual boot

Unified Extensible Firmware Interface

USB flash installation media

Syslinux

GRUB

tagged: linux

Linux下恢复误删除的文件

Posted on

经常有时候喜欢删除文件...但是之后又后悔删除... Linux下rm之后是没有回收站的.
于是我便寻找恢复文件的相关资料.

TestDisk

TestDisk是用来帮助恢复丢失的分区和使无法启动的启动盘再次启动.
使用TestDisk之前别忘了备份分区表.

备份分区表

# sfdisk -d /dev/sda > /tmp/sda.bak

恢复分区表

# sfdisk /dev/sda < /tmp/sda.bak

官方教程:TestDisk Step By Step

PhotoRec

PhotoRec是用来恢复丢失的文件和照片.即使重新格式化或严重损坏的文件系统都可以恢复. 但是PhotoRec只有全盘扫描和空闲分区扫描.耗时很长.对于自己无意中删除的小文件来说就是 杀鸡焉用牛刀.没有这个必要.

Extundelete

Extundelete设计的就是用来从ext3或ext4的分区恢复最近被删除的文件.它可以从一个相对路径恢复 被删除的文件,非常实用.但是只有当分区被卸载才可以使用.

恢复被删除的文件

# extundelete --restore-file tux/cv.tex /dev/sda4

恢复被删除的文件目录

# extundelete --restore-directory tux/Documents/tex/ /dev/sda4

Arch wiki:File recovery

百度网盘新版API

Posted on

突然发现百度网盘又更新API了....明明UI一点都没有更新.我严重怀疑这个前端工程师是有多寂寞... 没事就更新JS...这已经是我观察发现的第三次更新了...每次都导致我的aria2c导出脚本失效...

于是我又苦苦寻找新版的JS到底是怎么实现下载的,虽说可以直接操纵DOM获取选中的文件的fs_id信息 然后POST数据获取dlink(下载地址),但是这样怎么也不够优雅啊...因为百度自己的JS肯定实现了这部分内容 于是我便花了更多的时间找API,但是百度那既压缩又混淆的JS代码真是读起来特带劲啊(我绝对不是抖M)

于是说一下百度的新版API吧:

Toast模块

新版API把每个功能全部模块化,声明某个模块的方法是使用require方法.

    var SetMessage = function(msg, type) {
        var Toast = require("common:widget/toast/toast.js");
        Toast.obtain.useToast({
            toastMode: Toast.obtain[type],
            msg: msg,
            sticky: false
        });
    }

于是我便封装了一个函数用来实现消息提示.

data-center模块

    var File = require("common:widget/data-center/data-center.js");
    return File.get("selectedList");

data-center模块可以获取选择的文件的fs_id,通过传入fs_id可以获取dlink. File.get("selectedItemList")可以获取选择的文件的DOM结构.

commonService模块

    var Service = require("common:widget/commonService/commonService.js");
    Service.getDlink(JSON.stringify(File.get("selectedList")), "dlink", self.aria2_rpc.bind(self));

commonService模块有很多实用的功能,但是我们目前只需要这么一个就足够了,有需要的可以自己研究下.getDlink接受三个参数.第一个是 每个要下载的文件的fs_id,多个文件是数组的字符串方式传入,第二个是获取dlink的类型,总共有三个类型batsh,dlink,nolimit,第一个类型 是把传入的多个文件合并成一个压缩包进行下载,返回一个dlink,第二个是单独获取每个文件的dlink,第三个还没有尝试过.第三个参数是回调函数 会传入POST之后获取的json数据.

设置UA

因为我现在还没找到怎么获取选择的文件名的列表,所以在aria2c的时候无法手动指定文件名.貌似不写UA的情况下会被限速. 设置chrome的UA文件名会被encode,所以aria2c的时候设置UA为百度云管家的UA

    var UA="netdisk;4.4.0.6;PC;PC-Windows;6.2.9200;WindowsBaiduYunGuanJia";

设置cookie

百度云盘升级之后仅仅只有dlink还不行,还需要一个name为BDUSS的cookie. 但是这个cookie被设置为http only,所以JS是无论如何也获取不到的.目前只能采用手动设置的方法. 还好这个cookie每个用户基本都是唯一的,设置一次永久使用,否则真是麻烦.

完整版实现GitHub

书签:baidu_aria2c

Archlinux下声卡的设置与折腾

Posted on

最近又有瞎折腾装Arch....发现显卡驱动的安装和设置都不是问题... 声卡却老是出现奇怪的问题,便把最近折腾的经验写下来吧~

切换默认声卡

发现最近的新本子基本上声卡设备都不止一个,个人猜测应该是HDMI音频输出和 本机主板上的音频输出吧.可以使用 aplay -l 命令显示所有声卡设备. 我机器的输出是:

    [acgotaku@Archlinux ~]$ aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 1: PCH [HDA Intel PCH], device 0: ALC3220 Analog [ALC3220 Analog]
      Subdevices: 1/1
      Subdevice #0: subdevice #0

第一个一般为默认的声卡输出设备,显然HDMI输出是不对的,导致声音无法正常播放,我们应该把默认声卡切换为 第二个.最简单易用的方法是在用户根目录下新建一个 .asoundrc 文件.输入以下内容:

    defaults.pcm.card 1
    defaults.pcm.device 0
    defaults.ctl.card 1

上面的数据可以从声卡设备输出中找到,这样就切换到 card 1的 device 0 设备了.不过切换之后可能发现还是没有 声音,因为alsa默认是静音的需要手动解除才行. 这就需要去官方源安装 alsamixer 工具. alsa-utils 我自己安装的alsamixer使用界面是:

默认Master竖条下方显示的不是00而是MM,表示是静音的,按下 m 键解除静音.

耳机有持续的杂音的解决方案

有些情况下即使安装好alsa解除静音了,但仍然发现戴耳机的时候没有任何软件发声的时候会有持续的杂音,但是音乐播放器一旦放音乐的时候杂音又消失了. 这个问题的原因是alsa 默认设置Mic声道是静音的,我们只需要解除Mic声道的静音并调节至合适的值即可.

恢复默认的alsa设置

有些时候自己胡乱设置导致alsa无法正常工作的时候可以通过使用 alsactl restore 命令使alsa恢复到默认的配置一般都能正常工作了.

tagged: linux

Archlinux折腾笔记

Posted on

四月也算过去了一大半了,经过了一个月的奔波与折腾,总算安顿好自己了.在学校本地找了一个还算不错的实习. 阴差阳错的选择了Web开发工程师的职位,其实我最想做的是后端开发,前端也还是比较喜欢的.但是我有个很大的 缺点就是不会设计... 不会设计的前端开发工程师很鸡肋的,每次网站开发都是同学出设计图我来做的.这样不行的, 我必须能独当一面才算能在公司站得住脚.

近况就是这些,接下来就是记录下自己在Archlinux下折腾的东西.方便自己以后查询使用.

Linux下视频截图制作动态GIF

观看视频遇到经典的镜头当然得录下来做成GIF~ 首先需要安装 imagemagick 这个软件包才行

mplayer -vo png -ss 00:08:28 -frames 200 123.mp4 
mogrify -resize 848x480 *.png
convert -delay 4  *.png ry.gif

第一句话是利用mplayer输出png格式图片,从8分28秒开始,截图200帧,也可以换成

mplayer -vo png:z=1 -ss 00:08:28 -endpos 8  123.mp4

这样就是截取8秒,png后面的z=1是压缩比例从0到9 压缩程度递增,压缩速度也递增. 第二行便是修改尺寸,毕竟720p的GIF实在是吃不消啊.然后第三行变把这些png生成GIF了.

sudo设置环境变量

有时候程序需要使用root权限,但当我使用sudo的时候结果发现这时候程序又使用root用户的配置文件了.
现在的需求就是程序使用root权限运行但是执行时候读取HOME变量还是当前用户.
Run_X11_apps_using_sudo wiki上有清楚的讲解这样的解决办法.

Archlinux下有关无损音乐的折腾

Posted on

最近发现一些旧番的音乐只有无损的了...MP3的已经无法满足大众的需求了么....
但是在Linux下直接用MPD播放无损音乐不能分轨播放实在是不能接受. 于是就开始找寻切割的方法...Archwiki有相关的条目APE+CUE Splitting 但是,有个明显的缺陷是分轨之后的文件居然不是用歌曲名字命名的! 而且还是我不怎么喜欢的wav格式... 不过我还是在菊苣的帮助下找到了完美的解决方案~

无损音乐的分轨

Linux下有个shntool的工具非常实用,可以完美解决无损音乐分轨的问题. 根本不需要wiki里面说的cuebreakpoints
shntool split -f example.cue -t %n_%p_%t -o 'cust ext=mp3 lame --quiet - %f' example.ape
-t指的是文件的标题,%n 代表编号,%p 表示 Performer,%t 表示 Title.都是从cue里面读取的信息,shntool默认不支持 mp3格式的,所以需要指定用lame编码器进行编码.当然很多人只是想分轨,并不想转换成压缩的mp3格式.
shntool split -f example.cue -t %n_%p_%t -o flac example.ape
直接转换成flac格式就好了,因为flac格式是开源的无损音乐格式,播放器对它支持的肯定比较好. 如果出现 warning: failed to read data from input file using format: [ape]
这样的错误可能需要安装mac

给每个音乐文件打TAG

转换之后的文件只是单纯的音乐文件,每个音乐并没有包含想关的TAG信息,这时候需要用cuetag.sh给每个音乐文件打TAG
cuetag.sh脚本 最新版貌似有问题不能使用.
cuetag.sh file.cue *.mp3
命令很简单,在转换好的音乐文件夹下指定cue文件和mp3文件即可自动打TAG,但是需要注意的一点是,这个脚本打的是ID3v1的标签,如果是非英语语言的话, 会出现乱码问题.详情请戳Mp3标签乱码问题分析与解决方案 所以,之后我们还是要使用mp3tagiconv 这个工具来进行标签的转换使得所有的播放器都能够正确识别mp3音乐的标签.
for i in *.mp3; do echo "y"| mp3tagiconv "${i}" ;done
因为mp3tagiconv这个工具每次更新标签都会提示yes or no ,所以我就修改了下执行方式,使得批量自动化修改.flac格式的音乐不存在TAG编码问题.

flac转换为mp3

虽然在PC上听无损比较爽,但是放在手机上受制于存储空间和CPU性能,还是转换成Mp3比较好.
flac -d -c example.flac | lame -q 0 -b 320 - example.mp3
如果想保留flac的回放增益特性的话可以在转换的时候加上
--apply-replaygain-which-is-not-lossless 参数.

到此,折腾完毕...

Archlinux下使用airbase和dhcpd建立虚拟AP

Posted on

Linux下的wicd本身自带一个创建Ad-Hoc network功能的,但是这个功能太不实用了,
首先,Ad-Hoc只能把笔记本的无线通过有线进行共享,而且Ad-Hoc网络无法被安卓原生系统
识别,CM倒是可以用.hostapd也是一样.只能把有线网络通过无线进行共享.
但是我经常是电脑连接WIFI,并且想把WIFI共享给手机进行使用,于是我又开始折腾了 >_>

首先安装所需要的软件

    net-tools
    iptables
    aircrack-ng
    dhcpd

然后启动虚拟AP

    1.airmon-ng start wlp5s0 #启动无线网卡的monitor模式 wlp5s0是我网卡的设备名  
    这时候会看到输出 monitor mode enabled on mon0 mon0便是虚拟出来的一个网卡设备
    2.airbase-ng -e FreeWifi  -v mon0 & 在mon0设备上创建Fake AP  
    -e选项是设置SSID名字 -v是启动DEBUG模式 最后是设备名字,想进行后台运行请按Ctrl+D

激活tap insterface并添加路由表

执行上面的名字之后会输出Created tap interface at0 然后执行下面的命令

    ifconfig at0 up
    ifconfig at0 10.0.0.254 netmask 255.255.255.0
    route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.254

设置iptables

    iptables --flush
    iptables --table nat --flush
    iptables --delete-chain
    iptables --table nat --delete-chain
    iptables -P FORWARD ACCEPT
    iptables -t nat -A POSTROUTING -o wlp5s0 -j MASQUERADE
    //这里wlp5s0是我额外要连接到互联网的网卡设备名

配置DNS服务器

没有DNS服务器即使能搜到AP也无法连接,因为获取不到IP地址. 首先列出 dhcpd.conf的内容

    ddns-update-style none;
    default-lease-time 600;
    max-lease-time 7200;
    authoritative;
    subnet 10.0.0.0 netmask 255.255.255.0 {
    option subnet-mask 255.255.255.0;
    option broadcast-address 10.0.0.255;
    option routers 10.0.0.254;
    option domain-name-servers 114.114.114.114;
    range 10.0.0.1 10.0.0.140;
    }

然后执行下面的命令

    echo > '/var/lib/dhcp/dhcpd.leases'
    dhcpd -d -f -cf dhcpd.conf at0 &

最后启用IP forwarding

echo "1" > /proc/sys/net/ipv4/ip_forward

写在最后

虽然能创建虚拟AP,但是安卓原生系统连接获取到IP一段时间后 又会自动掉线,原因不明,希望知道的菊苣能告诉咱一声~

Archlinux下Galaxy Nexus刷机并root

Posted on

安卓本来就是Linux衍生的,所以必然可以用Linux系统进行刷机,而且效果比
Win还要好.不需要安装驱动,只需要安装adb和fastboot即可.

安装相关依赖

首先通过AUR源安装android-sdkandroid-sdk-platform-tools
相关的wiki在 这里
通过yaourt -Ql android-sdk-platform-tools 可以发现adb和fastboot都安装在
/opt/android-sdk/platform-tools 目录下,
但是PATH环境变量没有这个值,所以无法在终端里直接调用
必须先设置PATH变量 export PATH="${PATH}:/opt/android-sdk/platform-tools"
在 .xinitrc里面添加这句就可以使X下的终端PATH环境变量被添加.
也可以直接执行,当终端关闭时PATH变量的设置也失效.

配置ADB

前面提供的wiki已经很详细的讲述如何进行ADB的配置了

测试FASTBOOT

fastboot模式(上下音量键和开机键一起按),可以看到一个大大的Start画面,这就是进入了fastboot.
此时把手机用USB连入电脑. 在终端里面输入fastboot devices 如果提示 no permission即是普通用户没有权限
这时候就需要切换到root用户进行执行.如果输入一串数字.则说明系统识别到了你的手机.

刷机开始

首先要下载固件 下载下来的tgz文件解压即可看到有个flash-all.sh的脚本
首先 chmod +x flash-all.sh 赋予脚本执行权限
然后执行这个脚本即可,如果有大量输出则说明刷机正常进行中.

后续ROOT

ROOT的话首先需要刷recovery,我们先下载recovery
找到自己型号的recovery进行下载,我的是recovery-clockwork-touch-6.0.3.3-maguro.img
touch代表的是是否支持触摸.否则只能用音量键和开机键进行选择和确定.
然后下载superSU的ZIP压缩包,目前版本是1.41 ,ZIP格式不要解压.放入SD卡中.
adb push UPDATE-SuperSU-v1.41.zip /sdcard/
将手机关机进入fastboot模式,应该先解锁, fastboot oem unlock
然后刷入recovery fastboot flash recovery recovery-clockwork-touch-6.0.3.3-maguro.img
按下音量键调至recovery,按开机键进入,手机会自动重启进入recovery
choose zip from SDcard,然后依次进入,最终选择UPDATE-SuperSU-v1.41.zip,确认安装.
注:如果提示是否清除recovery flash,请选No,否则下次推送时无法进行OTA更新.
安装完成后依次返回.
这个步骤不会影响OTA更新,并且OTA更新之后会自动解决ROOT的问题,无需再次ROOT.

ADB小技巧

刷机之后需要一大堆APK软件安装怎么办 adb 本身只有单个APK安装的功能
通过 ls -1 *.apk | xargs -l adb install 这个命令可以批量的把一个文件夹下的所以APK安装上去,而且还是静默安装. 不过首先要打开ADB调试才行.

手机MTP连接Linux电脑

MTP是微软发明的东西....当然不好用 目前有两种解决方案一种是GMTP,速度较慢,因为第一次和之后所有操作之后都会全部索引一遍文件列表.
第二种是gvfs-mtp结合thunar使用,可以自动挂载,如果无法挂载可以使用 lsusb 命令.

Bus 001 Device 117: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1]

可以看到我的设备号,然后在地址栏里面输入 mtp://[usb:001,117]/
第一个数字是Bus 号,第二个数字是设备号.

Archlinux下终端进行代理的解决方案

Posted on

Linux下软件安装基本都是在终端下进行的....
虽说安装软件基本上选对源就没有无法安装的,但是Archlinux下的yaourt安装就是社区打包的软件了.
软件来源各种各样,有的是Google code上的,有的是GitHub上的,有的就是sourceforge上的了.
但是在中国的大环境下不能保证上面网站的正常访问 QAQ Google的话有hosts的情况下基本上是 把http修改成https就可以下载了,其余两个就只能代理进行下载软件并安装了.

代理

首先科学上网的话就需要代理,SSH这样进行端口监听的比较不错.VPN是全局代理就不用讲述了. 不过VPN也可以走路由表进行部分代理(不在本文讨论范围之内)
SSH的话在Linux下就是简单的一句 ssh -NfD 127.0.0.1:7070 user@server
因为SSH不是HTTP代理,所以需要转发,如果是纯HTTP代理的话直接配置环境变量即可.
前面写的是本机代理的端口,后面是服务器的用户名和服务器IP地址.

转发

SSH是SOCKET5代理,但是下载的话基本上就是HTTP代理 怎么转发呢? 这里就需要一个软件叫做Privoxy Privoxy可以把SOCKET5转HTTP代理,
首先安装它 sudo pacman -S privoxy
然后进行配置 sudo vim /etc/privoxy/config
在配置文件里面添加 forward-socks5 / 127.0.0.1:7070 . 注意后面有个点,容易忽略.
这个是转入的SOCKET5代理,指的是SSH的代理监听的端口号.
配置文件里面有句话是 listen-address 127.0.0.1:8118 这个是转发出去的HTTP代理的端口号
这样写好之后, 启动服务 sudo systemctl start privoxy.service

配置环境变量

转发实现之后就可以应用在终端里面了, 在终端里面输入

export https_proxy=127.0.0.1:8118
export http_proxy=127.0.0.1:8118

这样就完成代理的设置了.

Archlinux下安装过wps之后字体发虚的问题

Posted on

Office是Linux永远的痛...微软的Office市场霸主地位是根本无法撼动的...
但是微软那家伙很讨厌Linux和开源... Office产品目前也只有Windows和Mac 据说微软要出Linux版本的Office...但是不知道猴年马月啊 (望天

之所以字体发虚是因为安装WPS之后的方正字体使得Sans和Sans-Serif字体的中文部分默认指向了方正宋体.所以导致个这个问题的发生...效果如下图:

左边是微米黑,右边是装过WPS之后映射的宋体字.... 明显右边太难看了有木有!!!
解决方案是自己编写 fonts.conf设置字体的优先级...
文泉驿提供了一个在线配置生成工具 这个网页有部分JS资源被墙了,所以需要科学上网才能正常使用,需要注意.
配置完成之后点上面的“生成[create]”按钮,将结果复制保存到~/.fonts.conf就能覆盖系统的字体选择顺序. 注意上面的方法在Archlinux下会出现警告错误提示是过时的使用方法.
正确的解决办法是把配置文件写在 /etc/fonts/conf.avail/50-user.conf 这样就可以完美解决字体发虚的问题了.

下面贴一下我的配置方案:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- created by WenQuanYi FcDesigner v0.5 -->
<match>
    <test name="family"><string>Arial</string></test>
    <edit name="family" mode="prepend" binding="strong">
        <string>文泉驿微米黑</string>
            <!-- Please install 文泉驿微米黑 first -->
        <string>文泉驿等宽微米黑</string>
        <string>DejaVu Sans</string>
        <string>DejaVu Sans</string>
        <string>WenQuanYi Micro Hei</string>
            <!-- Please install WenQuanYi Micro Hei first -->
        <string>WenQuanYi Zen Hei</string>
        <string>Liberation Sans</string>
        <string>Droid Sans</string>
        <string>WenQuanYi Bitmap Song</string>
            <!-- Please install WenQuanYi Bitmap Song first -->
        <string>Cantarell</string>
            <!-- Please install Cantarell first -->
        <string>DejaVu Sans Condensed</string>
        <string>DejaVu Sans Light</string>
        <string>DejaVu Sans Mono</string>
        <string>DejaVu Serif</string>
        <string>DejaVu Serif Condensed</string>
        <string>方正书宋_GBK</string>
        <string>方正仿宋_GBK</string>
        <string>方正姚体_GBK</string>
        <string>方正宋体S-超大字符集</string>
        <string>方正宋体S-超大字符集(SIP)</string>
            <!-- Please install 方正宋体S-超大字符集(SIP) first -->
        <string>方正小标宋_GBK</string>
        <string>方正楷体_GBK</string>
        <string>方正细黑一_GBK</string>
        <string>方正行楷_GBK</string>
        <string>方正超粗黑_GBK</string>
        <string>方正隶书_GBK</string>
        <string>方正魏碑_GBK</string>
        <string>方正黑体_GBK</string>
    </edit>
</match>    
<match>
    <test name="family"><string>sans-serif</string></test>
    <edit name="family" mode="prepend" binding="strong">
        <string>文泉驿微米黑</string>
            <!-- Please install 文泉驿微米黑 first -->
        <string>文泉驿等宽微米黑</string>
        <string>DejaVu Sans</string>
        <string>DejaVu Sans</string>
        <string>WenQuanYi Micro Hei</string>
            <!-- Please install WenQuanYi Micro Hei first -->
        <string>WenQuanYi Zen Hei</string>
        <string>Liberation Sans</string>
        <string>Droid Sans</string>
        <string>WenQuanYi Bitmap Song</string>
            <!-- Please install WenQuanYi Bitmap Song first -->
        <string>Cantarell</string>
            <!-- Please install Cantarell first -->
        <string>DejaVu Sans Condensed</string>
        <string>DejaVu Sans Light</string>
        <string>DejaVu Sans Mono</string>
        <string>DejaVu Serif</string>
        <string>DejaVu Serif Condensed</string>
        <string>方正书宋_GBK</string>
        <string>方正仿宋_GBK</string>
        <string>方正姚体_GBK</string>
        <string>方正宋体S-超大字符集</string>
        <string>方正宋体S-超大字符集(SIP)</string>
            <!-- Please install 方正宋体S-超大字符集(SIP) first -->
        <string>方正小标宋_GBK</string>
        <string>方正楷体_GBK</string>
        <string>方正细黑一_GBK</string>
        <string>方正行楷_GBK</string>
        <string>方正超粗黑_GBK</string>
        <string>方正隶书_GBK</string>
        <string>方正魏碑_GBK</string>
        <string>方正黑体_GBK</string>
    </edit>
</match>
<match>
    <test name="family"><string>serif</string></test>
    <edit name="family" mode="prepend" binding="strong">
        <string>文泉驿微米黑</string>
            <!-- Please install 文泉驿微米黑 first -->
        <string>文泉驿等宽微米黑</string>
        <string>DejaVu Sans</string>
        <string>DejaVu Serif</string>
        <string>WenQuanYi Bitmap Song</string>
            <!-- Please install WenQuanYi Bitmap Song first -->
        <string>AR PL UMing CN</string>
            <!-- Please install AR PL UMing CN first -->
        <string>AR PL SungtiL GB</string>
            <!-- Please install AR PL SungtiL GB first -->
        <string>WenQuanYi Zen Hei Sharp</string>
            <!-- Please install WenQuanYi Zen Hei Sharp first -->
        <string>AR PL UMing TW</string>
            <!-- Please install AR PL UMing TW first -->
        <string>Liberation Serif</string>
            <!-- Please install Liberation Serif first -->
        <string>Bitstream Charter</string>
            <!-- Please install Bitstream Charter first -->
        <string>Droid Serif</string>
            <!-- Please install Droid Serif first -->
        <string>Cantarell</string>
            <!-- Please install Cantarell first -->
        <string>DejaVu Sans Condensed</string>
        <string>DejaVu Sans Light</string>
        <string>DejaVu Sans Mono</string>
        <string>DejaVu Serif</string>
        <string>DejaVu Serif Condensed</string>
        <string>方正书宋_GBK</string>
        <string>方正仿宋_GBK</string>
        <string>方正姚体_GBK</string>
        <string>方正宋体S-超大字符集</string>
        <string>方正宋体S-超大字符集(SIP)</string>
            <!-- Please install 方正宋体S-超大字符集(SIP) first -->
        <string>方正小标宋_GBK</string>
        <string>方正楷体_GBK</string>
        <string>方正细黑一_GBK</string>
        <string>方正行楷_GBK</string>
        <string>方正超粗黑_GBK</string>
        <string>方正隶书_GBK</string>
        <string>方正魏碑_GBK</string>
        <string>方正黑体_GBK</string>
    </edit>
</match>
<match>
    <test name="family"><string>monospace</string></test>
    <edit name="family" mode="prepend" binding="strong">
        <string>文泉驿微米黑</string>
            <!-- Please install 文泉驿微米黑 first -->
        <string>文泉驿等宽微米黑</string>
        <string>DejaVu Sans</string>
        <string>WenQuanYi Zen Hei Mono</string>
            <!-- Please install WenQuanYi Zen Hei Mono first -->
        <string>WenQuanYi Micro Hei Mono</string>
        <string>DejaVu Sans Mono</string>
        <string>Droid Sans Mono</string>
            <!-- Please install Droid Sans Mono first -->
        <string>WenQuanYi Zen Hei Sharp</string>
            <!-- Please install WenQuanYi Zen Hei Sharp first -->
        <string>Liberation Sans Mono</string>
            <!-- Please install Liberation Sans Mono first -->
        <string>AR PL UMing TW</string>
            <!-- Please install AR PL UMing TW first -->
        <string>Cantarell</string>
            <!-- Please install Cantarell first -->
        <string>DejaVu Sans Condensed</string>
        <string>DejaVu Sans Light</string>
        <string>DejaVu Sans Mono</string>
        <string>DejaVu Serif</string>
        <string>DejaVu Serif Condensed</string>
        <string>方正书宋_GBK</string>
        <string>方正仿宋_GBK</string>
        <string>方正姚体_GBK</string>
        <string>方正宋体S-超大字符集</string>
        <string>方正宋体S-超大字符集(SIP)</string>
            <!-- Please install 方正宋体S-超大字符集(SIP) first -->
        <string>方正小标宋_GBK</string>
        <string>方正楷体_GBK</string>
        <string>方正细黑一_GBK</string>
        <string>方正行楷_GBK</string>
        <string>方正超粗黑_GBK</string>
        <string>方正隶书_GBK</string>
        <string>方正魏碑_GBK</string>
        <string>方正黑体_GBK</string>
    </edit>
</match>
</fontconfig>

Ubuntu下apache2的配置记录

Posted on

自从2012年四月买VPS...到现在已经算是一年多了吧.在此感谢琴对我的帮助和指导.没有琴的指导我也不会折腾和配置VPS. 期间一点一点的成长都离不开大家的帮助.不过对琴的过度依赖,使我一度成为伸手党...真是十分抱歉 QAQ 现在写一篇日志记录下apache2的配置方法也可以留着自己以后进行参考.

安装apache套装

首先安装lamp sudo apt-get install lamp-server^
PHP开发和服务器运行环境首选LAMP组合,即Linux+Apache+Mysql+Php/Perl/Python,能最优化服务器性能

开启相关模块

启用 mod_rewrite 模块
sudo a2enmod rewrite
启用 mod_proxy 模块
sudo a2enmod proxy
sudo a2enmod proxy_http
启用 SSL 模块
sudo a2enmod ssl
a2xx系列的命令共有a2dismod、a2enmod、a2dissite、a2ensite,作用分别是禁用模块、启用模块、停用站点、启用站点这些命令简单得连--help选项都没有,只能运行看提示。其作用也很简单,就是在/etc/apache2/mods-enabled和/etc/apache2/sites-enabled里面建立或删除相对应的x-available目录里面的模块的链接。

具体相关配置

服务器资源一般很高贵,大家都会挂很多独立站点的.apache2默认存放网站的目录是 /var/www 配置文件储存在 /etc/apache2 主配置文件在 apache2.conf 其中这个配置文件包含了 sites-enabled 目录 这个目录是主要储存配置文件的地方 配置文件以 000-default 000-default-ssl 这种命名方式进行命名. 这两个文件是对http 和 https 进行默认配置.下面我们来看看这两个默认配置 vim 000-default

<VirtualHost *:80>
ServerAdmin acgotaku311@email.me
    ServerName _default_
DocumentRoot /var/www/default
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/default>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</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 ${APACHE_LOG_DIR}/error.log

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

CustomLog ${APACHE_LOG_DIR}/access.log combined

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>

第一行指定的是服务使用的端口 第二行 ServerAdmin 写的是服务器管理员的邮箱 第三行 ServerName 写的是服务器的名字 default 代表默认使用这个即服务器名字找不到对应的配置文件时时候此配置文件 第四行 DocumentRoot 写的是网站的根目录,即输入网址映射到服务器具体的哪个站点 Directory子节点是对具体目录进行配置 我们主要是对网站根目录进行权限的配置 其中主要说明的是 AllowOverride 选项 AllowOverride控制那些被放置在.htaccess文件中的指令 其余的配置基本不需要关心.

vim 000-default-ssl

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin acgotaku311@email.me
    ServerName  _default_
DocumentRoot /var/www/default
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
<Directory /var/www/default>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</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 ${APACHE_LOG_DIR}/error.log

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

CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined

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>

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

SSLCertificateFile    /etc/apache2/ssl/ssl.crt
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key


<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>
</IfModule>

SSL模块就是多了一个证书的设置 其余的基本不变.

其它站点基本就是拷贝默认的配置文件修改 ServerName 和 DocumentRoot 即可.

关于SSL证书

生成 SSl证书命令

openssl genrsa -des3 -out ssl.key 1024

然后他会要求你输入这个key文件的密码。不推荐输入。 但是生成时候必须输入密码。你可以输入后 再删掉。

mv ssl.key xxx.key  
openssl rsa -in xxx.key -out ssl.key  
rm xxx.key

然后根据这个key文件生成证书请求文件
openssl req -new -key ssl.key -out ssl.csr
以上命令生成时候要填很多东西 一个个看着写吧(可以随便,毕竟这是自己生成的证书) 最后根据这2个文件生成crt证书文件

openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt

这里365是证书有效期 推荐3650哈哈。这个大家随意。最后使用到的文件是key和crt文件。

这里生成的证书是不受信任的...我们可以在[StartSSL(http://www.startssl.com/)上 申请免费的证书.不过免费时间是一年,并且只能对根域名和一个子域名生效.不过一年后可以重新 注册,所以可以永远对根域名和一个子域名设置受信任的SSl证书. 相关的申请教程在此点我

使用GRUB2引导ISO镜像

Posted on

首先来说下什么是GRUB,熟悉Linux的同学都应该知道的说.它是一个多重操作系统启动管理器。用来引导不同系统,如windows,linux。 GRUB2就是GRUB的下一个版本.首先说下GRUB的作用吧,当你按下电脑上的电源按钮的时候,这时候电脑会开始加载BIOS,BIOS首先检查计算机硬件 能否满足运行的基本条件,这叫做"硬件自检"(Power-On Self-Test).自检完成之后,BIOS就会把系统控制权转交给下一阶段的启动程序,一般情况下 都会是硬盘,由硬盘启动时,BIOS通常是转向第一块硬盘的第一个扇区,即主引导记录(MBR).

装载GRUB和操作系统的过程,包括以下几个操作步骤:

    1、装载记录
    基本引导装载程序所做的唯一的事情就是装载第二引导装载程序。
    2、装载Grub
    这第二引导装载程序实际上是引出更高级的功能,以允许用户装载一个特定的操作系统。
    3、装载系统
    如linux内核。GRUB把机器的控制权移交给操作系统。
    不同的是,微软操作系统都是使用一种称为链式装载的引导方法来启动的,
    主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。

这时候就发挥GRUB2的作用了,根据不同的选项可以加载不同的操作系统,甚至可以加载ISO镜像.我此次折腾GRUB2就是为了免去每次安装系统的时候都去使用DD 刻录镜像的麻烦.然后写下来记录自己的一点成果. 下面就来讲解下如何使用GRUB2去引导ISO镜像

安装GRUB2到U盘上

准备好一个U盘,在Linux的操作环境下进行安装,确保自己的系统上已经安装过GRUB2,如果没安装的话,请自行安装,Arch下安装 pacman -S grub-bios

1.在终端下输入lsblk查看你自己的U盘是哪个设备,例如我的是sdc1
2.在/mnt下新建一个文件夹 并挂载上U盘 mkdir /mnt/USB && mount /dev/sdc1 /mnt/USB
3.安装GRUB2到U盘上 grub-install --force --no-floppy --root-directory=/mnt/USB /dev/sdc
4.这是GRUB2应该安装到U盘上了,如果U盘里没有boot文件夹可以直接copy系统的boot文件夹放进里面即可

配置GRUB2

GRUB2的配置文件就是boot/grub/grub.cfg文件

从Archlinux-x86_64启动

menuentry "Archlinux-x86_64.iso" --class iso {
  set isofile="/archlinux-2013.04.01-dual.iso"
  loopback loop (hd0,1)$isofile
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201304 img_dev=/dev/disk/by-uuid/DB7B-2C3D img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}

添加上面这段代码即可,首先要把Archlinux的安装镜像拷贝到U盘里面,第二行代码的意思就是设置isofile所在的位置,第二行是挂载iso镜像 hd(0,1) 的意思是IDE硬盘用hd表示,这里也可以表示U盘,0表示第一块磁盘,从0开始计数.1代表的是第一块分区,这里是从1开始计数.因为U盘引导的话第一块磁盘肯定是 U盘,所以前面的肯定是0,后面的1代表的是分区,如果你的分区是从其它数字开始的就做相应修改.第四行是加载内核,也就是ios里面的内核所在路径,archisolabel代表的 是虚拟挂载的时候的卷标,注意这个一定不能和你现有的硬盘或者U盘的卷标重复,否则会出现错误的.img_dev表示的是镜像所在的设备位置,这里使用uuid来表示,因为uuid是 U盘的固有属性,一般不会发生变化(除非你格式化U盘),所以保证一定能找到设备.
查看uuid的命令是 ls /dev/disk/by-uuid/ -al 查看卷标的命令是 ls /dev/disk/by-label -al initrd 是使用户能够指定一个在引导时可用的初始RAM盘。当内核为了完全引导而需要某些模块时,这是必需的。 还有另外一种启动方法

menuentry "Archlinux-x86_64.iso" --class iso {
  set isofile="/archlinux-2013.04.01-dual.iso"
  search -s -f -n /archlinux-2013.04.01-dual.iso
  probe --set=DB7B-2C3D -u $root
  loopback loop /archlinux-2013.04.01-dual.iso
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201304 img_dev=/dev/disk/by-uuid/DB7B-2C3D  img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/x86_64/archiso.img
}

从Archlinux-i686启动

和上面同理可得

menuentry "Archlinux-i686.iso" --class iso {
  set isofile="/archlinux-2013.04.01-dual.iso"
  loopback loop (hd0,1)$isofile
  linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201304 img_dev=/dev/disk/by-uuid/DB7B-2C3D img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/i686/archiso.img
}

用GRUB2启动其它ISO镜像

其它ISO启动链接
有关启动Win系列的镜像可以参考这个链接启动win镜像 上面链接说明了GRUB2使用ISO直接启动的原理,GRUB2只能读取ISO9660格式的镜像,只不过GRUB2是把ISO当作一个虚拟的CD罢了. 但是win7的安装镜像是ISO-13346 "UDF"格式的,也就是说GRUB2无法读取Win7镜像,所以使用ISO直接启动win7是不可能的事情了.