顯示具有 ubuntu 標籤的文章。 顯示所有文章
顯示具有 ubuntu 標籤的文章。 顯示所有文章

2015/7/20

在Linux系統上製作Windows的USB安裝隨身碟(EFI支援的GPT格式)

不論在Linux或是Windows上要製作Linux安裝隨身碟都有現成套件可以輕易完成(如UNetbootin),但反過來要在Linux系統上製作Windows安裝隨身碟就沒這麼容易了,但也只需要幾個步驟就可以了!
目前還是EFI跟Legacy BIOS的接棒時期,安裝隨身碟也就分為EFI支援的GPT格式跟Legacy BIOS的MBR格式,這篇文章方法僅適用GPT格式。

先安裝gparted套件對隨身碟進行磁區分割
sudo apt-get install gparted
sudo gparted
  1. 在右上角下拉式選單中,選擇隨身碟裝置。
  2. 卸載隨身碟裝置
    功能列選單:Partition > Unmount
  3. 建立Partition表格
    功能列選單:Device > Create Partition Table ...
    選擇gpt
  4. 建立分割區
    功能列選單:Partition > New
    選擇fat32
  5. 儲存變更
    Ctrl + Enter
  6. 關閉gparted
掛載windows安裝印象檔(*.iso)並將內容複製到隨身碟
sudo mkdir /mnt/iso /mnt/usb
sudo mount *.iso /mnt/iso
sudo mount /dev/sdXY /mnt/usb
sudo cp -R /mnt/iso/* /mnt/usb

完成上述步驟後就可以重新開機,並將開機裝置指定到隨身碟,就會進入Windows安裝界面了。目前驗證過Windows7(64-bits)與Windows8(64-bits)均能成功進入安裝畫面。

2015/7/8

Trace shell script的小技巧

參考上圖,有三個script,先執行test1.sh,會帶起test2.sh;test2.sh會再帶起test3.sh,如果從test1.sh開始了解程式架構,很容易就可以得知彼此之間的執行關係;但有時候線頭只抓到test2.sh或是test3.sh時就麻煩了。
  在Linux下可以使用bash maintain的$PPID變數再搭配ps指令就可以慢慢推敲出script file的呼叫關係。

直接看範例:
#!/bin/sh
# file: test1.sh

echo $0
echo "Execute by `ps -o comm -h --pid $PPID`"
echo ===========
./test2.sh

#!/bin/sh
# file: test2.sh

echo $0
echo "Execute by `ps -o comm -h --pid $PPID`"
echo ===========
./test3.sh

#!/bin/sh
# file: test3.sh

echo $0
echo "Execute by `ps -o comm -h --pid $PPID`"
echo ===========

執行結果:
./test1.sh
Execute by bash
===========
./test2.sh
Execute by test1.sh
===========
./test3.sh
Execute by test2.sh
===========

2015/7/7

更改Shell輸出文字的顏色、底線、粗體等控制

要在Shell輸出文字中有顏色改變、底線與粗體效果,需要用到如下的控制碼:
printf "'\033[0;31m'Hello'\033[0m'"
會在螢幕上顯示紅色的Hello,但這樣要記住所有效果的代碼也不是辦法,可以將每種效果定義為一種變數,如此要調用就會簡單多了,如下可以達到相同效果:
Red='\033[0;31m'
NC='\033[0m'

printf "${Red}Hello${NC}"

完整的效果定義
#!/bin/bash
# File: color.sh

# Regular Colors
Black='\033[0;30m'
Red='\033[0;31m'
Green='\033[0;32m'
Yellow='\033[0;33m'
#Orange='\033[0;33m'
Blue='\033[0;34m'
Purple='\033[0;35m'
Cyan='\033[0;36m'
White='\033[0;37m'

# Bold
BBlack='\033[1;30m'
BRed='\033[1;31m'
BGreen='\033[1;32m'
BYellow='\033[1;33m'
BBlue='\033[1;34m'
BPurple='\033[1;35m'
BCyan='\033[1;36m'
BWhite='\033[1;37m'

# Underline
UBlack='\033[4;30m'
URed='\033[4;31m'
UGreen='\033[4;32m'
UYellow='\033[4;33m'
UBlue='\033[4;34m'
UPurple='\033[4;35m'
UCyan='\033[4;36m'
UWhite='\033[4;37m'

# Background
GBlack='\033[40m'
GRed='\033[41m'
GGreen='\033[42m'
GYellow='\033[43m'
GBlue='\033[44m'
GPurple='\033[45m'
GCyan='\033[46m'
GWhite='\033[47m'

# High Intensity
IBlack='\033[0;90m'
IRed='\033[0;91m'
IGreen='\033[0;92m'
IYellow='\033[0;93m'
IBlue='\033[0;94m'
IPurple='\033[0;95m'
ICyan='\033[0;96m'
IWhite='\033[0;97m'

# Bold High Intensity
BIBlack='\033[1;90m'
BIRed='\033[1;91m'
BIGreen='\033[1;92m'
BIYellow='\033[1;93m'
BIBlue='\033[1;94m'
BIPurple='\033[1;95m'
BICyan='\033[1;96m'
BIWhite='\033[1;97m'

# High Intensity Background
GIBlack='\033[0;100m'
GIRed='\033[0;101m'
GIGreen='\033[0;102m'
GIYellow='\033[0;103m'
GIBlue='\033[0;104m'
GIPurple='\033[0;105m'
GICyan='\033[0;106m'
GIWhite='\033[0;107m'

LightGray='\033[0;37m'
DarkGray='\033[1;30m'
LightRed='\033[1;31m'
LightGreen='\033[1;32m'
Yellow='\033[1;33m'
LightBlue='\033[1;34m'
LightPurple='\033[1;35'
LightCyan='\033[1;36'

NC='\033[0m'

效果Demo
#!/bin/bash
# File: color_demo.sh
. color.sh

printf "${Black}Black${NC}\n"
printf "${Red}Red${NC}\n"
printf "${Green}Green${NC}\n"
printf "${Yellow}Yellow${NC}\n"
printf "${Blue}Blue${NC}\n"
printf "${Purple}Purple${NC}\n"
printf "${Cyan}Cyan${NC}\n"
printf "${White}White${NC}\n"

printf "${BBlack}BBlack${NC}\n"
printf "${BRed}BRed${NC}\n"
printf "${BGreen}BGreen${NC}\n"
printf "${BYellow}BYellow${NC}\n"
printf "${BBlue}BBlue${NC}\n"
printf "${BPurple}BPurple${NC}\n"
printf "${BCyan}BCyan${NC}\n"
printf "${BWhite}BWhite${NC}\n"

printf "${UBlack}UBlack${NC}\n"
printf "${URed}URed${NC}\n"
printf "${UGreen}UGreen${NC}\n"
printf "${UYellow}UYellow${NC}\n"
printf "${UBlue}UBlue${NC}\n"
printf "${UPurple}UPurple${NC}\n"
printf "${UCyan}UCyan${NC}\n"
printf "${UWhite}UWhite${NC}\n"

printf "${GBlack}GBlack${NC}\n"
printf "${GRed}GRed${NC}\n"
printf "${GGreen}GGreen${NC}\n"
printf "${GYellow}GYellow${NC}\n"
printf "${GBlue}GBlue${NC}\n"
printf "${GPurple}GPurple${NC}\n"
printf "${GCyan}GCyan${NC}\n"
printf "${GWhite}GWhite${NC}\n"

printf "${IBlack}IBlack${NC}\n"
printf "${IRed}IRed${NC}\n"
printf "${IGreen}IGreen${NC}\n"
printf "${IYellow}IYellow${NC}\n"
printf "${IBlue}IBlue${NC}\n"
printf "${IPurple}IPurple${NC}\n"
printf "${ICyan}ICyan${NC}\n"
printf "${IWhite}IWhite${NC}\n"

printf "${BIBlack}BIBlack${NC}\n"
printf "${BIRed}BIRed${NC}\n"
printf "${BIGreen}BIGreen${NC}\n"
printf "${BIYellow}BIYellow${NC}\n"
printf "${BIBlue}BIBlue${NC}\n"
printf "${BIPurple}BIPurple${NC}\n"
printf "${BICyan}BICyan${NC}\n"
printf "${BIWhite}BIWhite${NC}\n"

printf "${GIBlack}GIBlack${NC}\n"
printf "${GIRed}GIRed${NC}\n"
printf "${GIGreen}GIGreen${NC}\n"
printf "${GIYellow}GIYellow${NC}\n"
printf "${GIBlue}GIBlue${NC}\n"
printf "${GIPurple}GIPurple${NC}\n"
printf "${GICyan}GICyan${NC}\n"
printf "${GIWhite}GIWhite${NC}\n"
呈現結果

讓ssh連線不用手動輸入密碼(自動登入)

最近專案有個應用:在客戶端透過ssh自動連線到伺服器並下達命令,卻遇到了需要手動輸入密碼的問題,發現ssh有提供公私鑰機制可以免除每次登入都需要輸入密碼,設定步驟也很簡單:
  1. 產生金鑰:在客戶端執行
    ssh-keygen -t rsa -b 2048
    
    過程中會出現Enter passphrase提示輸入訊息,直接按Enter跳過即可
  2. 將產生的公鑰內容上傳到伺服器的~/.ssh/authorized_keys檔案
    ssh-copy-id user_id@server_ip
    
只要完成上述兩個步驟就完成了,步驟2的user_id需替換成遠端連線的帳號、server_ip則是遠端連線的ip,底下稍微做一下說明:
  • 步驟1會產生一組本機的公鑰與私鑰,執行完後可以在~/.ssh目錄下看到兩個檔案
    • id_rsa:私鑰,之後連線會使用這私鑰進行演算後傳送到遠端進行驗證
    • id_rsa.pub:公鑰,內容會儲存在遠端的~/.ssh/authorized_keys檔案內,客戶端傳來的驗證資訊會以這資訊進行驗證
  • 步驟2的ssh-copy-id其實是一隻script(/usr/bin/ssh-copy-id),功能就是把id_rsa.pub內容幫忙存到遠端的~/.ssh/authorized_keys檔案內。

2015/4/27

【Ubuntu】架設PXE Server

PXE開機運作原理是Bootloader(PC來說就是BIOS)在開機時動態要求分配IP,在取得IP資訊同時也會收到下一個伺服器的位址與該讀取的檔案資訊,接著透過TFTP服務取得開機核心與檔案系統。所以一台伺服器要提供PXE功能,至少要有DHCP與TFTP伺服器功能,首先安裝這兩個套件:
sudo apt-get install isc-dhcp-server
apt-get install tftpd-hpa inetutils-inetd

指定提供DHCP服務的網路卡
sudo vi /etc/default/isc-dhcp-server
將interface指定為eth0
INTERFACES="eth0"

設定DHCP服務
sudo vi /etc/dhcp/dhcpd.conf

# option definitions common to all supported networks...
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.100 192.168.0.253;
  option routers 192.168.0.254;
  option broadcast-address 192.168.0.255;
}
allow booting;
allow bootp;
option option-128 code 128 = string;
option option-129 code 129 = text;
next-server 192.168.0.254;
filename "pxelinux.0";

default-lease-time 600;
max-lease-time 7200;
若有domain name資訊則填入正確資訊,否則將相關兩的兩行敘述註解起來,否則啟動DHCP服務可能會帶不起來。這邊設定IP分配會從192.168.0.100到192.168.0.253,並指定client端取得IP資訊後接著要向192.168.0.254伺服器要求檔案pxelinux.0。
完成設定後重新啟動DHCP服務
sudo service isc-dhcp-server restart

修改tftp設定
sudo vi /etc/default/tftpd-hpa
增加敘述:
RUN_DAEMON="yes"
修改inet.conf
sudo vi /etc/inetd.conf
增加敘述
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot

重新啟動tftp服務
sudo service tftpd-hpa restart

到這邊PXE服務就算設定完成了,這時在client端選擇網路開機,應該會成功取得IP配置,但會卡在取得檔案階段,底下說明使用ubuntu server的安裝光碟裡面提供的netboot檔案,讓client可以透過PXE服務開啟安裝程式。

掛載安裝印象檔,並將需要的檔案複製到tftp目錄即可
sudo mount ubuntu-14.10-server-amd64.iso /mnt
sudo cp -avr /mnt/install/netboot/* /var/lib/tftpboot/

這時client在選擇網路開機,就可以進到ubuntu安裝畫面了!

2015/1/28

【Ubuntu】切換預設shell為bash

  Ubuntu基於效能等因素從6.10版以後將預設執行的shell由bash改為dash,最近要編譯PetaLinux在很前面步驟就錯誤了,從Log看不出點蛛絲馬跡,後來將預設的shell改為bash後一切就沒問題了!
  修改指令:
1
sudo dpkg-reconfigure dash
跳出選單選擇no即可完成修改。

參考文件:DashAsBinSh

2015/1/15

【Ubuntu】 開機自動登入Console

在Ubuntu上要設定開機後自動登入Console只需要三個步驟即可完成
  1. 安裝虛擬終端機程式mingetty
    1
    2
    sudo apt-get update
    sudo apt-get install mingetty
    
  2. 修改開機到文字介面
    1
    sudo vi /etc/default/grub
    
    將GRUB_CMDLINE_LINUX_DEFAULT設定值改為text(原本是quiet splash)

    設定完成後更新grub
    1
    sudo update-grub
    
  3. 設定自動登入
    1
    sudo vi /etc/init/tty1.conf
    
    將exec /sbin/getty -8 38400 tty1修改成exec /sbin/mingetty --autologin root tty1即可
完成上述三個步驟,重新開機後就可以看到系統開啟文字終端機並且以root帳號自動登入,若要改成其他帳號登入,可將第三步驟的root改成對應帳號名稱。

2014/7/12

【Ubuntu】讓VLC可以播放中文字幕

要讓VLC可以正確顯示中文字幕需要確保兩件事:
  1. 系統有安裝中文字體
  2. VLC選擇正確的字幕編碼格式
  關於第一點,中文字體多數人推薦使用文泉驛正黑體,在Ubuntu系統可以使用以下指令完成安裝:

1
sudo apt-get install ttf-wqy-zenhei

  第二點設定,開啟VLC後點選功能表單的工具→編號設定,接著選擇字幕/OSD頁面,將預設編碼設定為正體中文(Big5)並在偏好的字幕語言欄位填入字體路徑:


1
/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc

  做完上述設定重新開啟VLC後應該就可以正確顯示繁體中文字幕了!

2014/7/8

【Ubuntu】設定開機背光值

  在Linux上背光值每次重開機都會被設成最亮,這個問題一直很困擾人,查了一下可以透過修改/sys/class/backlight/acpi_video*/brightness內容來調整背光設定。
底下寫了一個簡單的Script來修改這設定值:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/sh

if [ $# -ne 1 ]; then
 echo "Usage: $0 <back light percent>"
 echo "Example: $0 100: Set back light to maximum"
 exit 1
fi

percent=$1

for acpi in /sys/class/backlight/acpi_video*
do
 max=`cat ${acpi}/max_brightness`
 val=$((max*percent/100))
 sudo sed -i "/exit 0$/i echo $val > ${acpi}/brightness" /etc/rc.local
done

使用方式如下:

  • ./set_backlight.sh 100:背光調成最亮
  • ./set_backlight.sh 0:關掉背光

  根據觀察在Notebook上會有兩組設定值,分別是acpi_video0與acpi_video1,acpi_video0是插上電源線會參考的數值,而acpi_video1是沒接電源線參考的數值,不過沒找到相關說明文件不是很確認這兩者的區別。

【Ubuntu】開關筆電的觸控板功能

  用Notebook打字最討厭被鍵盤下方的觸控面板干擾,如果筆電觸控板的快捷鍵開關是用Driver控制,這在Linux下就沒法直接用Fn+FunctionKey來作開關了,這時得用到xinput這隻工具來進行控制。
  後來在AskUbuntu討論區有看到別人用script來完成開關切換:執行一次功能就會由關閉變成開啟或是開啟變成關閉,直接看內容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/bin/bash

declare -i ID
ID=`xinput list | grep -iEo 'TouchPad\s*id\=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'`
declare -i STATE
STATE=`xinput list-props $ID|grep 'Device Enabled'|awk '{print $4}'`
if [ $STATE -eq 1 ]
then
    xinput disable $ID
    echo "Touchpad disabled."
else
    xinput enable $ID
    echo "Touchpad enabled."
fi

關鍵字:Touchpad、Toggle、Enable、Disable
參考:How to disable the touchpad?

2014/2/9

【Ubuntu】Chromium瀏覽器播放影音串流檔

因為各種影音解碼器(codecs)有版權問題,瀏覽器預設沒有帶入播放串流影音(如:mp3 stream)功能,如果需要相關串流影音必須自行另外安裝:

sudo apt-get install chromium-codecs-ffmpeg-extra
安裝完後重新啟動瀏覽器(有可能需要重新開機)就可以正常播放串流影音了。

Key Word:ubuntu, browser, chromium, stream codecs