ลิงก์ผู้สนับสนุน

วันพฤหัสบดีที่ 30 พฤษภาคม พ.ศ. 2556

[How to] disconnect ออกจาก remote desktop



ถ้าเราใช้งาน remote desktop ผ่านบาง app หลังจากปิด app ไปแล้ว แต่ปรากฏว่า session การใช้งานยังค้างไว้อยู่ ถ้าต้องการเช็คว่า มี session id ไหนค้างอยู่บ้าง ให้ใช้คำสั่ง qwinsta หลังจากเจอ user ที่ค้างใช้งานเอาไว้ แล้วต้องการปิด ให้ใช้คำสั่ง rwinsta ตามด้วย หมายเลข id ของแต่ละ session ที่จะปิด

END. ,,:P

วันอังคารที่ 19 มีนาคม พ.ศ. 2556

[Raspberry Pi] ทำเครื่อง รับ ส่ง รหัส morse




หลังจากที่ควบคุมขา GPIO กันได้แล้ว ต่อมา เนื่องจากว่าผมไม่รู้จะทำอะไรกับเจ้าขา GPIO ดี ก็เลยนึกเล่นๆไป ได้เครื่อง รับ-ส่ง รหัสมอสมาครับ

โดยในภาพ (และในสคริป) จะใช้ไฟจากขา #24 แล้วก็จากอีกขาหนึ่งที่มันจ่ายไฟ 3V ได้ เรียกไม่ถูกว่าอะไร 555

GPIO #24 -> ตั้งค่าเป็น output สำหรับจ่ายไฟ จากสคริป
3V -> สำหรับจ่ายไฟ ถ้าเราต้องการกดส่งรหัสมอสเอง
GPIO #23 -> ตั้งค่าเป็น input สำหรับรับรหัสมอส



มาดูที่ฝั่งตัวส่งรหัสมอสกันก่อน

#!/usr/bin/perl
$gpio=24;
$delay=0.25;                   #Delay of send speed
$pause=1*$delay;
$dot_pause=1*$delay;
$dash_pause=3*$delay;
$character_pause=3*$delay;
$word_pause=7*$delay;

print "\n\n";
print " Message >> ";
chomp($text=);
$original_text=$text;
@original_text=split //,$original_text;

$text=~s/ /\//ig;
$text=~s/\./.-.-.- /ig;
$text=~s/,/--..-- /ig;
$text=~s/\?/..-.. /ig;
$text=~s/a/.- /ig;
$text=~s/b/.--- /ig;
$text=~s/c/-.-. /ig;
$text=~s/d/-.. /ig;
$text=~s/e/. /ig;
$text=~s/f/..-. /ig;
$text=~s/g/--. /ig;
$text=~s/h/.... /ig;
$text=~s/i/.. /ig;
$text=~s/j/.--- /ig;
$text=~s/k/-.- /ig;
$text=~s/l/.-.. /ig;
$text=~s/m/-- /ig;
$text=~s/n/-. /ig;
$text=~s/o/--- /ig;
$text=~s/p/.--. /ig;
$text=~s/q/--.- /ig;
$text=~s/r/.-. /ig;
$text=~s/s/... /ig;
$text=~s/t/- /ig;
$text=~s/u/..- /ig;
$text=~s/v/...- /ig;
$text=~s/w/.-- /ig;
$text=~s/x/-..- /ig;
$text=~s/y/-.-- /ig;
$text=~s/z/--.. /ig;
$text=~s/1/.---- /ig;
$text=~s/2/..--- /ig;
$text=~s/3/...-- /ig;
$text=~s/4/....- /ig;
$text=~s/5/..... /ig;
$text=~s/6/-.... /ig;
$text=~s/7/--... /ig;
$text=~s/8/---.. /ig;
$text=~s/9/----. /ig;
$text=~s/0/----- /ig;

print " Sending >> $original_text[0]";
$count_text=1;
foreach (split //,$text) {
    if ($_ eq '.') {
        system("echo \"0\" > /sys/class/gpio/gpio$gpio/value");
        select undef,undef,undef,$pause;
        system("echo \"1\" > /sys/class/gpio/gpio$gpio/value");
        select undef,undef,undef,$dot_pause;
    }
    elsif ($_ eq '-') {
        system("echo \"0\" > /sys/class/gpio/gpio$gpio/value");
        select undef,undef,undef,$pause;
        system("echo \"1\" > /sys/class/gpio/gpio$gpio/value");
        select undef,undef,undef,$dash_pause;
    }
    elsif ($_ eq ' ') {
        system("echo \"0\" > /sys/class/gpio/gpio$gpio/value");
        select undef,undef,undef,$character_pause;
        print "$original_text[$count_text]";
        $count_text++;
    }
    elsif ($_ eq '/') {
        system("echo \"0\" > /sys/class/gpio/gpio$gpio/value");
        select undef,undef,undef,$word_pause;
        print "$original_text[$count_text]";
        $count_text++;
    }
    else { print "\nERROR: $_\n"; exit; }
}
print "\n";




หลักการของมันก็คือ รับตัวอักษรจากเราเข้า แล้วก็แปลงเป็น >> . - 'ช่องว่าง' / << แล้วก็ส่งค่า 0 กับ 1 ออกไปตามจังหวะ พอส่งค่า 1 ออกไปจากขา #24 ไฟ LED ก็จะติด แล้วก็ยังส่งค่าไปที่ขา #23 อีกด้วย(ซึ่งจะเป็นของฝั่งรับสัญญาณ ถ้าต้องการดูแค่ LED กระพริบเป็นสัญญาณ ขา #23 ก็ไม่ต้องใช้)
หรือถ้าเรา จะส่งรหัสมอสเอง อยากได้อารมณ์ของการนั่งกดปุ่มจริงๆ 5555 ก็กดจากสวิตได้เลย เพราะมีไฟจ่ายให้ทาง switch จากแหล่งจ่ายไฟ 3V ตลอดอยู่แล้ว



ทีนี้ มาดูทางฝั่งรับ รหัสมอส

#!/usr/bin/perl
$delay=0.1; #second
$timeout=60;  #loop for exit if didnt get any morse code
$text='';
$gpio=23;

print " Geting >> ";

do {
    open READ,"cat /sys/class/gpio/gpio$gpio/value |";
    $value=;
    close READ;
    select undef,undef,undef,$delay;
    $end=0;
} until ($value == 1);

while (1) {
    open READ,"cat /sys/class/gpio/gpio$gpio/value |";
    $value=;
    close READ;
    if ($value == 1) {
        print '1';
        select undef,undef,undef,$delay;
        $text.='1';
        $end=0;
    }
    else {
        print ',';
        select undef,undef,undef,$delay;
        $text.=',';
        ++$end;
    }
    if ($end > $timeout) {
        print "\n Morse >> ",analys($text);
        print "\n Text >> ",convert(analys($text));
        print "\n";
        exit;
    }
}


sub analys {
    my $text=$_[0];
#    $text=~s/1{3,}/-/g;            #For send speed = 0.125
#    $text=~s/1{1,2}/./g;           #For send speed = 0.125
#    $text=~s/,{11,}/  \/  /g;      #For send speed = 0.125
#    $text=~s/,{4,10}/  /g;         #For send speed = 0.125
#    $text=~s/,{1,3}//g;            #For send speed = 0.125
    $text=~s/1{4,}/-/g;            #For send speed = 0.25
    $text=~s/1{1,3}/./g;           #For send speed = 0.25
    $text=~s/,{11,}/  \/  /g;      #For send speed = 0.25
    $text=~s/,{5,10}/  /g;         #For send speed = 0.25
    $text=~s/,{1,4}//g;            #For send speed = 0.25
    return " ".$text." ";
}

sub convert {
    my $text=$_[0];
    $text=~s/ \.- /a/ig;
    $text=~s/ \.--- /b/ig;
    $text=~s/ -\.-\. /c/ig;
    $text=~s/ -\.\. /d/ig;
    $text=~s/ \. /e/ig;
    $text=~s/ \.\.-\. /f/ig;
    $text=~s/ --\. /g/ig;
    $text=~s/ \.\.\.\. /h/ig;
    $text=~s/ \.\. /i/ig;
    $text=~s/ \.--- /j/ig;
    $text=~s/ -\.- /k/ig;
    $text=~s/ \.-\.\. /l/ig;
    $text=~s/ -- /m/ig;
    $text=~s/ -\. /n/ig;
    $text=~s/ --- /o/ig;
    $text=~s/ \.--\. /p/ig;
    $text=~s/ --\.- /q/ig;
    $text=~s/ \.-\. /r/ig;
    $text=~s/ \.\.\. /s/ig;
    $text=~s/ - /t/ig;
    $text=~s/ \.\.- /u/ig;
    $text=~s/ \.\.\.- /v/ig;
    $text=~s/ \.-- /w/ig;
    $text=~s/ -\.\.- /x/ig;
    $text=~s/ -\.-- /y/ig;
    $text=~s/ --\.\. /z/ig;
    $text=~s/ \.---- /1/ig;
    $text=~s/ \.\.--- /2/ig;
    $text=~s/ \.\.\.-- /3/ig;
    $text=~s/ \.\.\.\.- /4/ig;
    $text=~s/ \.\.\.\.\. /5/ig;
    $text=~s/ -\.\.\.\. /6/ig;
    $text=~s/ --\.\.\. /7/ig;
    $text=~s/ ---\.\. /8/ig;
    $text=~s/ ----\. /9/ig;
    $text=~s/ ----- /0/ig;
    $text=~s/ \.-\.-\.- /./ig;
    $text=~s/ --\.\.-- /,/ig;
    $text=~s/ \.\.-\.\. /?/ig;
    $text=~s/ //ig;
    $text=~s/\// /ig;
    return $text;
}

หลักการทำงานคือ หลังจากรันสคริป มันจะรอเรื่อยๆ จนกว่าจะมีไฟจ่ายเข้าทาง #23 มันถึงจะเริ่มทำงาน โดยมันจะนับเวลาที่มีไฟจ่ายเข้า
  • ถ้าจ่ายเข้าสั้นๆ ก็นับเป็น . (dot)
  • ถ้าจ่ายเข้ายาวๆก็นับเป็น - (dash)
  • ถ้าเว้นว่างระยะหนึ่ง แล้วจ่ายไฟเข้าใหม่ ก็นับเป็นสิ้นๆสุดหนึ่งตัวอัก
  • ถ้าเว้นว่างยาวอีกหน่อย แล้วจ่ายไฟเข้าใหม่ ก็นับเป็นหนึ่งคำ
  • ถ้าเว้นว่างยาวเรื่อยๆ ก็ถือว่าสิ้นสุดการรับส่ง
พอรับมาเป็น . - 'ช่องว่าง' / แล้ว ก็เอามาแปลงเป็นตัวอักษรอีกทีนึง



จบละครับ หลักการง่ายๆ ตอนนี้ยังไม่รู้ว่าทำเสร็จ จะเอาประโยชน์อะไรดี ทำเอาเล่นๆสนุกๆก่อน ใครมีไอเดียวแจ่มๆ ก็มาแชร์กันบ้างนะครับ :P

Download morse-send.pl >> http://pastebin.com/Zi8WKn0L
Download morse-receive.pl >> http://pastebin.com/SidGeJtD

[Raspberry Pi][Perl] ควบคุม GPIO บน RaspberryPi ด้วย perl


อธิบายก่อนนะครับ ว่าอันที่จริง ไม่ใช่ใช้คำสั่ง perl ซักเท่าไหร่ แต่จะใช้ภาษา perl รันคำสั่ง linux ตอนใช้งาน GPIO บน raspberry pi อีกทีนึง ไม่งงนะ = = 55555

สำหรับสคริปนี้ ต้องรันด้วยสิทธิ์ root นะครับ (login ด้วย user root ก่อนรัน หรือใช้คำสั่ง sudo perl file.pl)

print "\n [+]----------------------------------------[+]";
print "\n  |    GPIO Control by using perl on bash    |";
print "\n  |      Test on Raspbian Wheezy [RPi]       |";
print "\n  |                                          |";
print "\n  |   Created by : AssazziN                  |";
print "\n  |   Version 1: 11 Mar 2013                 |";
print "\n [+]----------------------------------------[+]\n";

print "\n >> type h|help for help\n";
do {
    print " >> ";
    chomp($input=);
    if ($input eq 'h' or $input eq 'help') { help(); }

    elsif ($input=~/^export (\d{1,2})$/) {
        system("echo \"$1\" > /sys/class/gpio/export");
    }

    elsif ($input=~/^direction (\d{1,2}) (out|in)$/) {
        system("echo \"$2\" > /sys/class/gpio/gpio".$1."/direction");
    }

    elsif ($input=~/^value (\d{1,2}) (1|0)$/) {
        system("echo \"$2\" > /sys/class/gpio/gpio".$1."/value");
    }

    elsif ($input=~/^unexport (\d{1,2})$/) {
        system("echo \"$1\" > /sys/class/gpio/unexport");
    }

    elsif ($input=~/status/i) {
        @pin=();
        $pin=`find /sys/class/gpio/ gpio*`;
        while ($pin=~/sys\/class\/gpio\/gpio(\d{1,2})/g) { push(@pin,$1); }
        print " All pins that useabled : @pin\n";
    }

    elsif ($input eq 'q' or $input eq 'quit' or $input eq 'exit') {}
    else { print " $input : command not found\n"; }
} while ($input ne 'q' and $input ne 'quit' and $input ne 'exit');



sub help {
    print "\n ** This script requirement ROOT ***\n";
    print " > export [GPIO PIN]                 set gpio pin to useable\n";
    print " > direction [GPIO PIN] [out|in]     set gpio pin direction\n";
    print " > value [GPIO PIN] [1|0]            set gpio pin value\n";
    print " > unexport [GPIO PIN]               set gpio pin to unuseable\n";
    print " > status                            check status of all pin\n";
    print " > q quit exit                       exit script\n\n";
}


Pastebin: [Raspberry Pi] GPIO Control

ส่วนการใช้งานคำสั่งๆจริงๆ แบบไม่ผ่านสคริปนี้ ก็แกะจากโค้ดเอาละกัน ;p

คำสั่งเปิดใช้งานขา gpio ขาที่ #23 : sudo echo "23" > /sys/class/gpio/export
คำสั่งให้ขา gpio #23 เป็นตัว output : sudo echo "out" > /sys/class/gpio/gpio23/direction
คำสั่งให้ขา gpio #23 เป็นตัว input : sudo echo "in" > /sys/class/gpio/gpio23/direction
คำสั่งจ่ายไฟให้ขา gpio #23 : sudo echo "1" > /sys/class/gpio/gpio23/value
คำสั่งหยุดจ่ายไฟให้ขา gpio #23 : sudo echo "0" > /sys/class/gpio/gpio23/value
คำสั่งอ่านค่าสถานะของขา gpio #23 : cat /sys/class/gpio/gpio23/value
คำสั่งเลิกใช้งานขา gpio ขาที่ #23 : sudo echo "23" > /sys/class/gpio/unexport

วันจันทร์ที่ 11 มีนาคม พ.ศ. 2556

[Raspberry Pi] การเปิดใช้งาน ftp ด้วย vsftpd


สำหรับการเปิดใช้งาน ftp บน raspberry pi รู้สึกว่าจะมีให้เลือกใช้บริการหลายเจ้านะ แต่อันที่จริงคือ ผมรู้จักแต่ vsftpd 5555 ;p เห็นว่าตัวนี้ได้รับความนิยมเยอะด้วย ถึงมีปัญหาอะไร ก็จะมีเพื่อนช่วยแก้ให้เยอะด้วย จริงมั้ยหละ ? :)

เอาละครับ มาถึงเวลาลองกันละ
1. ตามสเตปเลย sudo apt-get install vsftpd
2. แล้วก็ไปตั้งค่ากันก่อน sudo nano /etc/vsftpd.conf
   2.1 แก้ตรงบรรทัด anonymous_enable=YES  ให้เป็น  anonymous_enable=NO (เพื่อป้องกันไม่ให้ใครก็ได้ล็อกอินเข้ามาแบบไม่ใส่ user ไม่ใส่ pass)
   2.2 แก้ตรง #local_enable=YES โดยเอาเครื่องหมาย # ออก (เพื่อให้ทุก user ใน /etc/passwd ล็อกอินเข้ามาได้)
   2.3  แก้ตรง #write_enable=YES โดยเอาเครื่องหมาย # ออก (เพื่อให้ user ที่ล็อกอินเข้ามา สามารถเขียนไฟล์ได้)
   (2.3) หรือบ้างคน อาจจะเพิ่มบรรทัด force_dot_files=YES เข้าไปบรรทัดสุดท้ายของไฟล์ด้วยก็ได้ เพื่อให้โปรแกรม ftp แสดงไฟล์ .htaccess
   2.4 ถ้าต้องการแก้ไข default ที่อยู่ของแต่ละ user สมมติว่า เรา ftp เข้าไปด้วย user ชื่อ www-data แล้วที่อยู่ปกติจะอยุ่ที่ /home/pi เราต้องการให้อยู่ที่ /var/www ให้แก้ที่ไฟล์ /etc/passwd หรือใช้คำสั่ง sudo -d /var/www www-data

3. ตั้งค่าเรียบร้อย ก็เปิดใช้งานเลย sudo service vsftpd restart
4. สามารถล็อกอินใช้งานจาก programs ftp ทั่วไปได้แล้ว

Ref : http://spalinux.com/2011/09/install_configure_vsftpd_ftp_server
http://www.voip4share.com/centos-the-community-enterprise-operating-system-f55/vsftpd-ftp-server-centos-t1162.html
http://www.itmanage.info/technology/linux/vsftp_config_read_only.html

วันอาทิตย์ที่ 10 มีนาคม พ.ศ. 2556

[Raspberry Pi] การใช้ vnc เพื่อ remote จากคอมไป raspberyy pi


สำหรับจะทำให้ Raspberry Pi เป็นเครื่อง vnc server ต้องติดตั้งตัว tightvncserver ก่อนครับ
sudo apt-get install tightvncserver  ต่อมาถ้าจะสร้าง 'หน้าต่าง' (ไม่รู้ว่าจะเรียกว่าอะไร 5555) ที่จะให้รีโมตเข้ามา กำหนดค่ายังงี้ครับ >> vncserver -geometry 1366x768 :N ตรง N อันนี้ใส่เป็นตัวเลขนะครับ เลขอะไรก็ได้ ประมาณว่า เป็นหมายเลขของ 'หน้าต่าง' ที่เราใช้งาน ปกติมันจะตั้งค่าละเอียดกว่านี้อยู่หรอก แต่หลักผมก็ใช้เท่านั้นแหละ อยากจะรู้การใช้งานแบบละเอียด ก็ vncserver --help เลย

สำหรับทางเครื่อง PC ,NB ที่จะ remote เข้าไป ถ้าเป็น windows ผมแนะนำโปรแกร ultra vnc viewer นะครับ จากที่ลองมาใช้งานได้ง่ายดี วิธีใช้งานก็แค่ ใส่หมายเลข ip ของ rPi ตามด้วย :N  เหมือนในภาพเลย


[Raspberry Pi] ลง nginx เพื่อทำ pi เป็น webserver


จากที่ลองหาความแตกต่างระหว่าง nginx กับ apache รู้สึกว่า nginx จะเป็นน้องใหม่มาแรง ทั้งความเร็วในการเข้าถึง จำนวน connection ที่รองรับ ขนาดความจำที่ใช้ ในหลายๆด้านจะดีกว่า apache ในบทความนี้ ผมเลยจะเขียนเกี่ยวกับการลง nginx กันนะครับ

อันดับแรกเลย ไม่พ้น sudo apt-get install nginx
หลังจากนั้นก็ sudo apt-get install php5-fpm php5-cli php5-curl php5-gd php5-mcrypt php5-mysql php5-cgi  เพื่อทำให้ php5 ทำงาน

1. ต่อมาใช้คำสั่ง sudo mkdir /var/www เพื่อสร้างโฟลเดอร์สำหรับเก็บไฟล์ต่างๆของ server
2. ค่า default ของ nginx โฟลเดอร์ของเวปจะอยู่ที่ /usr/share/nginx/www เพราะงั้น เราก็ต้องย้ายโฟล์เดอร์นั้น มาที่ /var/www ก่อน sudo cp /usr/share/nginx/www/*.* /var/www
3. ต่อมา ก็แก้ไขการตั้งค่าอีกนิดหน่อย sudo nano /etc/nginx/sites-available/default
4. แล้วก็เอา #(comment) ข้างหน้า listen   80; ## listen for ipv4; this line is default and implied ออก
6. ที่บรรทัด root /usr/share/nginx/www; ให้แก้เป็นที่อยู่โฟลเดอร์ webserver ของเรา -> root /var/www;
5. เอาเครื่องหมาย # ออกตั้งแต่ location ~ \.php$ {......}  ยกเว้นบรรทัด fastcgi_pass 127.0.0.1:9000;

6. กด Ctrl+x เพื่อออก -> กด y เพื่อบันทึก -> enter
7. sudo service nginx start
8. เข้าใช้งาน web server ของเราได้แล้วว :)

ต่อมา ติดตั้ง mysql กันเพิ่มอีกหน่อย
1. sudo apt-get install mysql-server mysql-client
2. ในระหว่างติดตั้ง มันก็จะให้ใส่ mysql password ก็ตั้งใส่กันไป


เสร็จแล้วก็มายัดสิทธิ์ ความเป็นเจ้าของให้กับ /var/www/ กันหน่อย ผมขอเลือก user ที่ชื่อ www-data ละกัน
sudo chown -R www-data:www-data /var/www

โอเชครับ เท่านี้ก็เสร็จไปครึ่งทางละ เดี๋ยวว่างๆไว้จะมาต่อกันกับการใช้งาน ftp และ phpmyadmin กัน

Ref : http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-on-ubuntu-11.10
http://en.joscandreu.com/blog/install-nginx-on-raspberry-pi/

[Raspberry Pi] การเปลี่ยน layout keyboard


สำหรับตอนที่ลง OS Raspbian ใหม่ๆ เวลาที่พิม์ " @ # พวกนี้ อักขระมันจะไม่ใช่อย่างที่คีย์บอร์ดบ้านเราเห็นนะครับ เพราะ layout keyboard เดิม มันเป็นของ British เราก็ต้องมาแก้ให้มันเป็นของ US กันซะก่อน

sudo nano /etc/default/keyboard
แก้จาก gb ให้เป็น us
กด ctrl+x เพื่อออก -> กด y เพื่อบันทึก -> enter

แล้วก็ reboot ไปหนึ่งที ก็ใช้งานได้ละครับ