網頁

2016年8月26日 星期五

EeePC 之觸控板

# synclient // 列出所有參數
# synclient TapButton1=1 // 模擬滑鼠按右鍵
# synclient TapButton12=3 // 模擬滑鼠按左鍵,但是沒用
# synclient VertEdgeScroll=1 // 觸控板右側,模擬垂直捲動
# synclient HorizEdgeScroll=1 // 觸控板底部,模擬水平捲動

開啟 x-win 時載入設定
# vi /etc/X11/xorg.conf.d/70-synaptics.conf
Section "InputClass"
    Identifier "touchpad"
    Driver "synaptics"
    MatchIsTouchpad "on"
        Option "TapButton1" "1"
        Option "VertEdgeScroll" "on"
        Option "HorizEdgeScroll" "on"
EndSection

EeePC 之 SSD 優化

安裝偵測工具
# pacman -Ss sysstat
# pacman -S sysstat
# iotop -oPa
# iostat -d 3 3

查詢磁碟分割是否對齊,對齊返回0
# blockdev --getalignoff /dev/sda1
I/O Scheduler 使用 NOOP
# cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
# echo noop > /sys/block/sda/queue/scheduler // 不能使用 vi 編輯
# cat /sys/block/sda/queue/scheduler
[noop] deadline cfq
設定開機使用 NOOP
# vi /boot/syslinux/syslinux.cfg
APPEND root=/dev/sda1 elevator=noop

關閉 journal
# tune2fs -O "^has_journal" /dev/sda1

/etc/fstab 說明
discard: 使用 TRIM 指令
noatime: Do not update inode access times on this filesystem (e.g, for faster access on the news spool to speed up news servers).
relatime: Update inode access times relative to modify or change time. Access time is only updated if the previous access time was earlier than the current modify or change time. (Similar to noatime, but doesn't break mutt or other applications that need to know if a file has been read since the last time it was modified.)
data=ordered: This is the default mode. All data is forced directly out to the main file system prior to its metadata being committed to the journal.
data=writeback: Data ordering is not preserved - data may be written into the main filesystem after its metadata has been committed to the journal.
journal_checksum: Enable checksumming of the journal transactions.
journal_async_commit: Commit block can be written to disk without waiting for descriptor blocks.

$ cat /etc/fstab
#
#
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
# /dev/sda1
#UUID=f46258e7-e1ef-4127-a93e-ed8962b14f90 /         ext4       rw,relatime,discard,data=ordered 0 1
#UUID=f46258e7-e1ef-4127-a93e-ed8962b14f90 /         ext4       rw,noatime,discard,data=ordered 0 1
UUID=f46258e7-e1ef-4127-a93e-ed8962b14f90 /         ext4       rw,relatime,discard,journal_checksum,journal_async_commit,data=ordered 0 1
#UUID=f46258e7-e1ef-4127-a93e-ed8962b14f90 /         ext4       rw,noatime,discard,data=writeback 0 1
#UUID=f46258e7-e1ef-4127-a93e-ed8962b14f90 /         ext4       rw,noatime,discard 0 1
tmpfs /tmp tmpfs size=1G,noatime,mode=1777 0 0

做了上述的動作,但其實也分不出那些有用,那些沒用

EeePC 701 之 conky 設定

[mark@ArchLinux ~]$ cat .conkyrc 
override_utf8_locale yes
# Output
########
TEXT
${font sans:bold:size=12}CPU ${cpubar cpu0}
${font sans:bold:size=12}RAM $membar
${font sans:bold:size=12}BAT $battery_bar
${font sans:bold:size=12}CPU Temp: $alignr${execi 10 sensors | grep ^"temp1:" | awk '{print $2}'}
${font sans:bold:size=12}Fan: $alignr${execi 10 sensors | grep ^"fan1:" | awk '{print $2}'}RPM

#${font sans:bold:size=12}SYSTEM ${hr 2}
#${font sans:normal:size=12}$sysname $kernel $alignr $machine
#Host:$alignr$nodename
#Uptime:$alignr$uptime
${font sans:bold:size=12}TOP PROCESSES ${hr 2}
${font sans:normal:size=12}CPU: ${top name 1}${alignr}${top cpu 1}%
${font sans:normal:size=12}IO: ${top_io name 1}${alignr}${top_io io_write 1}
${font sans:normal:size=12}Mem: ${top_mem name 1}${alignr}${top_mem mem 1}%

修改 Win 10 的時鐘

regedit
HEKY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentCersion/ImmersiveShell
UseWin32TrayClockExperience REG_DWORD 0x00000001(1)

2016年8月19日 星期五

Arch Linux on EeePC 701

進入 Arch Linux 官網,選擇 HTTP 方式下載映像檔(archlinux-2016.08.01-dual.iso)
使用 Rufus 製作可開機的  USB/SD Card
連上有線網路,安裝會由網路下載資料
選擇由 SD 卡進入安裝程序

分割硬碟,因為硬碟不大,使用單一分割
# cgdisk /dev/sda
引號很重要,失敗很多次才知道
# mkfs.ext4 -O "^64bit" /dev/sda1
# mount /dev/sda1 /mnt
 將台灣的伺服器移到前面
vi /etc/pacman.d/mirrorlist
## Taiwan
Server = http://archlinux.cs.nctu.edu.tw/$repo/os/$arch
Server = http://shadow.ind.ntou.edu.tw/archlinux/$repo/os/$arch
Server = http://ftp.tku.edu.tw/Linux/ArchLinux/$repo/os/$arch
Server = http://ftp.yzu.edu.tw/Linux/archlinux/$repo/os/$arch
# pacstrap /mnt base
# genfstab -p -U /mnt >> /mnt/etc/fstab
# arch-chroot /mnt
# passwd
# echo ArchLinux > /etc/hostname
開啟 DHCP service
# systemctl enable dhcpcd@enp3s0.service
# vi /etc/locale.gen
解開下列3項
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
zh_TW.UTF-8 UTF-8
# locale-gen
# ln -s /usr/share/zoneinfo/Asia/Taipei /etc/localtime
# date
開機程序有一些不同的選擇,我後來使用 syslinux,另外有 GRUB, LILO 等
# mkinitcpio -p linux
# pacman -S gptfdisk
# pacman -S syslinux
# syslinux-install_update -i -a -m
# vi /boot/syslinux/syslinux.cfg
改 APPEND root=/dev/sda3 rw
為 APPEND root=/dev/sda1 rw
# exit
# umount /mnt
# reboot

login by root若之前已經開啟 DHCP Service,就不需執行下列命令
# dhcpcd enp3s0

安裝觸控板# pacman -S xf86-input-synaptics

安裝音效
# pacman -S alsa-utils
# alsamixer
# aplay /usr/share/sounds/alsa/Front_Center.wav
# arecord -d 5 test-mic.wav
# aplay test-mic.wav

安裝顯示卡驅動
# pacman -S xf86-video-intel

安裝圖形介面 Openbox, LXDM, Tint2
# pacman -S wget
# pacman -S sudo
# wget http://web.dhjh.tc.edu.tw/~gzqbyr/obtint.zip
# pacman -S unzip
# unzip obtint.zip
vi ./botint
在執行 obtint 前,將 firefox 改成 chromium
# ./obtint

設定 NumLock# vi /etc/lxdm/lxdm.conf
numlock=0

安裝 Mount 工具# pacman -S udevil

安裝 firefox 之 flash (安裝 chrome 之 flash 會移除這個 plugin)
# pacman -S flashplugin

安裝 chrome,若以利用 obtint 安裝過,不須執行下列命令# pacman -S chromium
安裝 chrome 之 flash
# pacman -S binutils
# pacman -S fakeroot
https://aur.archlinux.org/packages/adobe-flashplugin/
下載 adobe-flashplugin.tar.gz
$ tar xvfz adobe-flashplugin.tar.gz
$ cd adobe-flashplugin
$ makepkg -s
# pacman -U adobe-flashplugin-22.0.0.192-1-i686.pkg.tar.xz
重開機後使用 chrome 開啟 chrome://plugins 使用 Adobe Flash Player

設定 x-win 之 Menu/Browser
# vi ~/.config/openbox/menu.xml 改
<item label="Browser"><action name="Execute">
<execute>chromium -disk-cache-dir="/tmp"</execute>
</action></item>
設定 x-win 之 shortcut key
# vi ~/.config/openbox/rc.xml 改
<keybind key="W-w">
  <action name="Execute">
    <command>chromium -disk-cache-dir="/tmp"</command>
    <startupnotify>
      <enabled>yes</enabled>
      <name>Web Browser</name>
    </startupnotify>
  <action>
</keybind>

安裝 Network Manager 圖形化網路管理
# pacman -S networkmanager
# pacman -S network-manager-applet
# pacman -S wireless_tools
# systemctl stop dhcpcd@enp3s0
# systemctl disable dhcpcd.service
# systemctl enable NetworkManager.service
# reboot

顯示電池狀態$ vi ~/.config/tint2/tint2rc
battery_hide = never

切換 consoleAlt+Fn
有 X-Win 時切換 consoleCtrl+Alt+Fn
切換中文輸入法
Ctrl+Space

螢幕解析度設定
# pacman -S xorg-xrandr
# xrandr
# xrandr --output LVDS1 --panning 800x480 --scale 1.4x1.4
# xrandr --output LVDS1 --mode 800x480 --fb 800x600 --panning 800x600
# xrandr --output LVDS1 --mode 800x480 --fb 800x600 --panning 800x600 --scale 1x1
scale 最好是 1x1,這樣才看得清楚
fb 是桌面,panning 是滑鼠座標

修改桌面資訊顯示
# vi ~/.conkyrc
${top_io name 1}${top_io io_write 1} // io 最高的 process
${top_mem name 1}${top_mem mem 1}% // 佔最多記憶體的 process

偵測 CPU溫度,風扇
# pacman -Ss lm-sensors
# pacman -Ss sensors
# pacman -S lm_sensors
# sensors-detect // 它會問你一堆問題,最好是回答預設值
# cat /etc/modules
# sensors
# vi ~/.conkyrc
override_utf8_locale yes // 沒有設定,°C前會有亂碼
CPU Temp:$alignr${execi 10 sensors | grep ^"temp1:" | awk '{print $2}'}
Fan:$alignr${execi 10 sensors | grep ^"fan1:" | awk '{print $2}'}RPM

風扇控制# sensors-detect // 會在 /etc/modules 內加入感測器模組
# pwmconfig // 會去偵測 pwm 控制器,和風扇的關係,並產生 /etc/fancontrol
模組的位置
/sys/class/hwmon/hwmon?/device 主裝置,如CPU,主機板,顯卡等
/sys/class/hwmon/hwmon?/device/pwm? 裝置內可用 pwm
/sys/class/hwmon/hwmon?/device/fan?_input 裝置內可用風扇
/etc/fancontrol 說明
FCTEMPS=hwmon0/device/pwm1=hwmon0/device/temp1_input // PWM 裝置對映到的溫度感測器
FCFANS=hwmon0/device/pwm1=hwmon0/device/fan1_input // PWM 裝置對映到的風扇轉速計
MINTEMP 低於此溫度,風扇使用最小速度轉動
MAXTEMP 高於此溫度,風扇使用最高速度轉動
MINSTART 高於此 PWM,風扇開始轉動,通常大於 MINSTOP
MINSTOP 低於此 PWM,風扇停止轉動
MINPWM 當溫度低於 MINTEMP,使用此 PWM 轉動
MAXPWM 當溫度高於 MAXTEMP,使用此 PWM 轉動
# systemctl enable fancontrol.service
原本由 pwmconfig 產生的 fancontrol 是可以運作
但偶而會因為開機模組載入次序產生問題
# systemctl status fancontrol.service
所以改用下列設定檔
# vi /etc/fancontrol
# Configuration file generated by pwmconfig, changes will be lost
INTERVAL=10
FCTEMPS= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=/sys/devices/virtual/hwmon/hwmon[[:print:]]*/temp1_input
FCFANS= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=/sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/fan1_input
MINTEMP= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=30
MAXTEMP= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=55
MINSTART= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=150
MINSTOP= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=100
MINPWM= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=100
MAXPWM= /sys/devices/platform/eeepc/hwmon/hwmon[[:print:]]*/pwm1=255

解決開機時沒插網路線,等待 1min 34s
# systemctl status dhcpcd@enp3s0.service // 錯誤訊息
# systemd-analyze critical-chain // 開機載入模組的相依
若開機時有使用 enable dhcpcd@enp3s0.service
# vi /etc/systemd/system/dhcpcd@.service.d/timeout.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dhcpcd -w -q -t 10 %I
若開機時使用 systemctl enable NetworkManager.service
# vi /usr/lib/systemd/system/dhcpcd@.service
ExecStart=/usr/bin/dhcpcd -w -q -t 10 %I

使用 ramdisk
# findmnt --target /tmp // 查詢 /tmp 的實體位置
手動加入 ramdisk
# mkdir /tmp
# chmod 777 /tmp
# mount -t tmpfs -o size=1G tmpfs /tmp // 使用 1G 的記憶體
開機時自動加入 ramdisk
# vi /etc/fstab // add a line
tmpfs /tmp tmpfs size=1G, mode=1777 0 0
chrome 使用 ramdisk
$ chromium --disk-cache-dir="/tmp/chrome"
# vi /usr/share/applications/chromium.desktop
Exec=/usr/bin/chromium -disk-cache-dir="/tmp/chrome" %U


下面是安裝時所遇到的一些困難過程

安裝 SD 開機時顯示
:: mounting '/dev/disk/by-label/ARCH_201608' to '/run/archiso/bootmnt'
Waiting 30 seconds for device /dev/disk/by-label/ARCH_201608 ...
ERROR '/dev/disk/by-label/ARCH_201608' device did not show up after 30 seconds...
You can try to fix the problem manually, log out when you are finished
我使用下列命令去修正它,但後來幾次就沒遇到,懷疑是接上有線網路,一切皆會順暢
ln -s /dev/sdb1 /dev/disk/by-label/ARCH_201608
mount /dev/sdb1 /run/archiso/bootmnt
rm /dev/disk/by-label/ARCH_201608
exit

使用 cgdisk 不用選擇開機磁區,試過下列命令
lsblk // 列出可用的儲存裝置
cgdisk /dev/sda
cfdisk /dev/sda
fdisk
spfdisk
parted /dev/sda print
parted /dev/sda set 1 bios_grub on
parted /dev/sda set 1 legacy_boot on
parted /dev/sda set 1 boot on
mkfs.ext4 /dev/sda1
mkfs.ext4 -O "^64bit" /dev/sda1
mkfs.ext4 -O "^has_journal" /dev/sda1

安裝網路時,試過下列命令
lspci -v // 查詢 PCI 裝置
Kernel moudles: ath5k
Kernel moudles: atl2
dmesg | grep ath5k // 在開機訊息中尋找,網路裝置名稱
ip link
iw dev
iw dev wlp1s0 link
ip link set wlp1s0 up
ip link show wlp1s0
iw dev wlp1s0 scan
iw dev wlp1s0 connect "your_essid"
iw dev wlp1s0 link
ip addr add 192.168.1.73/24 dev wlp1s0
ip route add default via 192.168.1.1
dhcpcd enp3s0
ping 192.168.1.1
vi /etc/resolv.conf // 設定 DNS
nameserver 192.168.1.1
ping www.google.com

設定安裝時,網路下載不穩定
vi /etc/pacman.conf // 使用 wget 下載,但使用有線網路時,一切順暢,不需要
#XferCommand /usr/bin/wget --passive-ftp -c -O %o %u

開機程序有一些不同的選擇,我後來使用 syslinux

查詢磁碟分割是否對齊,對齊返回0
# blockdev --getalignoff /dev/sda1
使用 TRIM 指令,加入 discard 旗標
取消檔案 atime 的修改,加入 noatime 旗標
vi /etc/fstab
/dev/sda1 / ext4 defaults,noatime,discard 0 1
I/O Scheduler 使用 NOOP
cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
# vi /boot/syslinux/syslinux.cfg
APPEND root=/dev/sda1 elevator=noop
關閉 journal
tune2fs -O "^has_journal" /dev/sda1
查詢寫入最多的 process
iotop -oPa