<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    銀色幻想

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    學(xué)習(xí)交流

    最新評(píng)論

    X Window System運(yùn)行原理與啟動(dòng)過程

    一) 基本運(yùn)行原理
    X Window System采用C/S結(jié)構(gòu),但和我們常見的C/S不同。常見的C/S結(jié)構(gòu)中,稱提供服務(wù)的一方為server,即服務(wù)器端(如HTTP服務(wù),F(xiàn)TP服務(wù)等),使用服務(wù)的稱為client,即客戶端。但在X Window System中,client是執(zhí)行程序的一方,在上面執(zhí)行各種X程序,而server則是負(fù)責(zé)顯示client運(yùn)行程序的窗口的一方。

    X Window System的組成可以分為X server,X client,X protocol三部分。X server主要控制輸入輸出,維護(hù)字體,顏色等相關(guān)資源。它接受輸入設(shè)備的輸入信息并傳遞給X client,X client將這些信息處理后所返回的信息,也由X server負(fù)責(zé)輸出到輸出設(shè)備(即我們所見的顯示器)上。X server傳遞給X client的信息稱為Event,主要是鍵盤鼠標(biāo)輸入和窗口狀態(tài)的信息。X client傳遞給X server的信息則稱為Request,主要是要求X server建立窗口,更改窗口大小位置或在窗口上繪圖輸出文字等。X client主要是完成應(yīng)用程序計(jì)算處理的部分,并不接受用戶的輸入信息,輸入信息都是輸入給X server,然后由X server以Event的形式傳遞給X client(這里感覺類似Windows的消息機(jī)制,系統(tǒng)接收到用戶的輸入信息,然后以消息的形式傳遞給窗口,再由窗口的消息處理過程處理)。X client對(duì)收到的Event進(jìn)行相應(yīng)的處理后,如果需要輸出到屏幕上或更改畫面的外觀等,則發(fā)出Request給X server,由X server負(fù)責(zé)顯示。

    常見的情況是X server與X client都在同一臺(tái)電腦上運(yùn)行,但他們也可分別位于網(wǎng)絡(luò)上不同的電腦上。在X Window System中,X client是與硬件無關(guān)的,它并不關(guān)心你使用的是什么顯卡什么顯示器什么鍵盤鼠標(biāo),這些只與X server相關(guān)。我們平常安裝完XFree86后運(yùn)行xf86config或xf86cfg進(jìn)行的配置實(shí)際上只是與X server有關(guān),可以說就是配置X server吧,不配置照樣可以運(yùn)行X client程序(如:xeyes -display xserver:0就可以在xserver這臺(tái)機(jī)器上的0號(hào)屏幕(屏幕編號(hào)displaynumber為0)上顯示那對(duì)大眼睛了)。

    X protocol就是X server于X client之間通信的協(xié)議了。X protocol支持現(xiàn)在常用的網(wǎng)絡(luò)通信協(xié)議。我只能測(cè)試TCP/IP,可以看到X server偵聽在tcp 6000端口上。那X protocol就是位于運(yùn)輸層以上了,應(yīng)該屬于應(yīng)用層吧?。
    總結(jié)下運(yùn)行過程吧:
    (1) 用戶通過鼠標(biāo)鍵盤對(duì)X server下達(dá)操作命令
    (2) X server利用Event傳遞用戶操作信息給X client
    (3) X client進(jìn)行程序運(yùn)算
    (4) X client利用Request傳回所要顯示的結(jié)果
    (5) X server將結(jié)果顯示在屏幕上

    二) 啟動(dòng)過程
    我們從控制臺(tái)進(jìn)入X一般是用startx命令。下面就從startx分析起。首先man startx和man xinit可以看到staratx和xinit的使用方法:
    startx [[client] options .....] [-- [server] options ....]
    xinit [[client] options ] [-- [server] [display] options]
    把上面[client]和[server]分別稱為client程序和server程序。man手冊(cè)里寫明其必須以/或者./開頭。
    下面看看startx這個(gè)腳本,中文為我加的注釋,這個(gè)腳本是安裝x-window-system-core后得到的,都是XFree86,不同發(fā)行版的linux里該腳本應(yīng)該大同小異:
    #!/bin/sh
    userclientrc=$HOME/.xinitrc #用戶的client定義文件
    userserverrc=$HOME/.xserverrc #用戶的server定義文件
    sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc #系統(tǒng)的client
    sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc #系統(tǒng)的server
    defaultclient=/usr/X11R6/bin/xterm #默認(rèn)的client程序
    defaultserver=/usr/X11R6/bin/X #默認(rèn)的server程序
    defaultclientargs="" #下面定義了client和server的參數(shù)變量
    defaultserverargs=""
    clientargs=""
    serverargs=""

    #如果用戶client文件存在則使用用戶文件里定義的client,否則使用系統(tǒng)定義的client
    if [ -f $userclientrc ]; then
    defaultclientargs=$userclientrc
    elif [ -f $sysclientrc ]; then
    defaultclientargs=$sysclientrc
    fi

    #如果用戶server文件存在則使用用戶文件里定義的server,否則使用系統(tǒng)定義的server
    if [ -f $userserverrc ]; then
    defaultserverargs=$userserverrc
    elif [ -f $sysserverrc ]; then
    defaultserverargs=$sysserverrc
    fi

    #下面循環(huán)處理client和server的參數(shù)
    whoseargs="client"
    while [ x"" != x ]; do #若第一個(gè)參數(shù)為空,退出循環(huán)
    case "" in
    # '' required to prevent cpp from treating "/*" as a C comment.
    /''*|./''*) #如果是/*或者./*形式(xinit程序要求其參數(shù)里的client程序和server程序必須以/或./開頭,否則會(huì)被視為client程序和server程序的參數(shù),見man xinit)
    if [ "$whoseargs" = "client" ]; then #如果當(dāng)前是在處理client的參數(shù)
    if [ x"$clientargs" = x ]; then #如果clientargs為空,則賦值給client變量,也即上面#startx使用方法里的[client]參數(shù)
    client=""
    else
    clientargs="$clientargs " #否則clientargs賦值為$clientargs ,即上面#startx使用#方法里的options參數(shù)
    fi
    else #當(dāng)前在處理server的參數(shù),代碼的含義同上
    if [ x"$serverargs" = x ]; then
    server=""
    else
    serverargs="$serverargs "
    fi
    fi
    ;;
    --)#如果為--,則表示開始處理server的參數(shù),--為client和server參數(shù)的分界
    whoseargs="server"
    ;;
    *)
    if [ "$whoseargs" = "client" ]; then #處理給client程序的參數(shù)
    clientargs="$clientargs "
    else #處理給server程序的參數(shù)
    # display must be the FIRST server argument
    #屏幕編號(hào)必須為第一個(gè)給server程序的參數(shù),以的形式(x為數(shù)字),這可從上面startx和xinit 的使用
    #方法的區(qū)別看出,xinit多了個(gè)[display],這里即過濾出這個(gè)[display]。試試看這兩個(gè)命令:
    #xinit /usr/bin/X11/xeyes -display localhost:1 -- /usr/bin/X11/X :1 -dpi 70&
    #xinit /usr/bin/X11/xeyes -display localhost:1 -- /usr/bin/X11/X -dpi 70 :1&
    #即可看出不把屏幕編號(hào)作為第一個(gè)server參數(shù)的后果
    if [ x"$serverargs" = x ] && expr "" : ':[0-9][0-9]*$' > /dev/null 2>&1; then
    display=""
    else #處理屏幕編號(hào)以外的參數(shù)
    serverargs="$serverargs "
    fi
    fi
    ;;
    esac
    shift #所有參數(shù)左移一次
    done

    # process client arguments
    if [ x"$client" = x ]; then #如果client程序?yàn)榭?BR># if no client arguments either, use rc file instead
    if [ x"$clientargs" = x ]; then #且clientargs為空,賦值$defaultclientargs給client程序
    client="$defaultclientargs"
    else
    client=$defaultclient #使用默認(rèn)的client程序
    fi
    fi

    # process server arguments處理server參數(shù),同上
    if [ x"$server" = x ]; then
    # if no server arguments or display either, use rc file instead
    if [ x"$serverargs" = x -a x"$display" = x ]; then
    server="$defaultserverargs"
    else
    server=$defaultserver
    fi
    fi
    #…………省略授權(quán)代碼若干

    xinit $client $clientargs -- $server $display $serverargs #把處理過的參數(shù)交由xinit程序處理
    #…………
    由上面代碼可以得出startx主要是置X client和X server所在的位置,并處理相關(guān)參數(shù),最后交給xinit處理。可以看出startx 設(shè)置X client的位置是先搜尋$HOME/.xinitrc,然后是/etc/X11/xinit/xinitrc;設(shè)置X server的位置是先搜尋$HOME/.xserverrc,然后是/etc/X11/xinit/xserverrc。這就解釋了我們平常為什么說啟動(dòng)X Window時(shí)用戶目錄下的.xinitrc和.xserverrc文件優(yōu)先級(jí)要高。所以我們用startx命令啟動(dòng)X時(shí),如果用戶目錄存在. xinitrc和.xserverrc文件,則實(shí)際上等價(jià)于命令xinit $HOME/.xinitrc -- $HOME/.xserverrc 。如果用戶目錄不存在那兩個(gè)文件,則等價(jià)于xinit /usr/X11R6/lib/X11/xinit/xinitrc -- /usr/X11R6/lib/X11/xinit/xserver。別的情況類推。

    至于xinit,則根據(jù)startx傳過來的參數(shù)啟動(dòng)X server,成功后根據(jù)xinitrc啟動(dòng)X client。
    以上即為X Window System的啟動(dòng)過程,startx只是負(fù)責(zé)一些參數(shù)傳遞,真正的X啟動(dòng)由xinit實(shí)現(xiàn)。實(shí)際上可以分為啟動(dòng)X server和啟動(dòng)X client兩部分。下面在用戶目錄下構(gòu)造.xinitrc(即X client)和.xserverrc(即X server)文件。在.xserverrc里寫入/usr/bin/X11/X :1。.xinitrc里寫入/usr/bin/X11/xeyes -display localhost:1。這就是最簡單的X server + X client了,只不過把屏幕編號(hào)從默認(rèn)的0改為了1,這里X server即是/usr/bin/X11/X 程序,X client即是/usr/bin/X11/xeyes 程序。
    總結(jié)下單機(jī)用startx啟動(dòng)過程吧:
    (1) startx置X client和X server的位置,處理參數(shù)并調(diào)用xinit
    (2) xinit根據(jù)傳過來的參數(shù)啟動(dòng)X server,成功后呼叫X client
    (3) 根據(jù)xinitrc設(shè)置相關(guān)資源,啟動(dòng)窗口管理器,輸入法和其他應(yīng)用程序等X client程序。

    但還未搞清楚gnome是怎么起來的!gnome當(dāng)然屬于X client了,看上面啟動(dòng)過程第(3)步。
    這里分兩種情況看吧,第一種是用系統(tǒng)的xinitrc文件。看/etc/X11/xinit/xinitrc文件(我的sarge裝x-window- system-core和gnome-core),里面只包含了. /etc/X11/Xsession一句話。接著看/etc/X11/Xsession這個(gè)腳本,只看關(guān)鍵部分吧。最后面有:

    SESSIONFILES=$(run_parts $SYSSESSIONDIR)
    if [ -n "$SESSIONFILES" ]; then
    for SESSIONFILE in $SESSIONFILES; do
    . $SESSIONFILE
    done
    fi
    exit 0

    接著看run_parts(),位于本文件中間:
    run_parts () {
    # until run-parts --noexec is implemented
    if [ -z "" ]; then
    internal_errormsg "run_parts() called without an argument."
    fi

    if [ ! -d "" ]; then
    internal_errormsg "run_parts() called, but "" does not exist or is"
    "not a directory."
    fi

    for F in $(ls ); do
    if expr "$F" : '[[:alnum:]_-]+$' > /dev/null 2>&1; then
    if [ -f "/$F" ]; then
    echo "/$F"
    fi
    fi
    done
    }

    大概意思就是run_parts () 把$SYSSESSIONDIR目錄下的文件名取出來賦值給$SESSIONFILES,然后循環(huán)運(yùn)行該目錄下的文件。看看該目錄,即 /etc/X11/Xsession.d目錄,可以看到幾個(gè)以數(shù)字開頭的文件,實(shí)際上這些數(shù)值就表示了這幾個(gè)文件被運(yùn)行的優(yōu)先級(jí),數(shù)字小的優(yōu)先級(jí)高,因?yàn)樵谏厦娴膔un_parts () 里是用ls命令顯示該目錄下的文件,所以前面數(shù)字小的被ls時(shí)顯示在前面,所以被
    for SESSIONFILE in $SESSIONFILES; do
    . $SESSIONFILE
    done

    這個(gè)for循環(huán)執(zhí)行時(shí)也先被執(zhí)行。看到/etc/X11/Xsession.d目錄下有個(gè)55gnome-session_gnomerc文件,里面提到了STARTUP變量。然后運(yùn)行:
    xdkui@Debian:/etc/X11/Xsession.d$ grep STARTUP *
    看到50xfree86-common_determine-startup文件。里面有
    if [ -z "$STARTUP" ]; then
    if [ -x /usr/bin/x-session-manager ]; then
    STARTUP=x-session-manager
    elif [ -x /usr/bin/x-window-manager ]; then
    STARTUP=x-window-manager
    elif [ -x /usr/bin/x-terminal-emulator ]; then
    STARTUP=x-terminal-emulator
    fi
    fi

    即設(shè)置啟動(dòng)程序,實(shí)際上設(shè)置STARTUP變量,如果以上程序都沒有找到,則會(huì)報(bào)錯(cuò)退出,即X環(huán)境沒有被啟動(dòng)。再運(yùn)行
    xdkui@Debian:/etc/X11/Xsession.d$ grep STARTUP *
    看到優(yōu)先級(jí)最低也即最后被運(yùn)行的99xfree86-common_start文件,里面只有一句話:
    exec $STARTUP
    好了,到這里就啟動(dòng)我們的X client了,終于完了^_^。總結(jié)下這第一種方式的啟動(dòng)過程,簡單的說就是依次順序查找/usr/bin/x-session-manager ,x-window-manager,/usr/bin/x-terminal-emulator 這三個(gè)文件。如果存在則啟動(dòng)之,也即X client。如果三個(gè)都不存在則報(bào)錯(cuò)退出了。看/usr/bin/x-session-manager文件可以看到是個(gè)符號(hào)連接,最終連接到 /usr/bin/gnome-session,也就是gnome 了。至于我們?cè)趃nome 啟動(dòng)時(shí)可能會(huì)設(shè)置啟動(dòng)輸入法等程序,那就歸gnome-session管了,也就不再分析了。可以試著把/usr/bin/x-session- manager 改為指向xfce4-session(如果安裝了的話) ,再startx就會(huì)啟動(dòng)xfce4環(huán)境了。大概RedHat的switchdesk工具就是改這個(gè)連接實(shí)現(xiàn)的吧?。或者刪掉/usr/bin/x- session-manager ,再startx,只啟動(dòng)了/usr/bin/x-window-manager 所指向的window manager了吧,我這里是blackbox。

    下面看第二種情況,即用戶目錄的xinitrc文件$HOME/.xinitrc。對(duì)比hiweed-debian- desktop_0.55_i386,存在$HOME/.xinitrc文件,在里面有exec xfce4-session。故其X client可以說最主要的x-session-manger是從$HOME/.xinitrc啟動(dòng)的。也就不會(huì)經(jīng)過上面第一種情況的執(zhí)行過程了。

    終于把gnome(或者說x-session-manger)的啟動(dòng)過程弄明白了,下面說點(diǎn)別的吧。xinit程序同時(shí)啟動(dòng)X server和X client,這在單機(jī)上還可。要是位于網(wǎng)絡(luò)上的兩臺(tái)電腦分別是client和server,則xinit就無能為力了。這時(shí)就得靠純“手工”來啟動(dòng)X 了。下面簡單的“手工”啟動(dòng)X server和X client:在CUI模式下運(yùn)行命令:
    xdkui@Debian:~$X :1&

    看到了一個(gè)灰色的全屏幕和一個(gè)鼠標(biāo)指針,這就是X server了,其屏幕編號(hào)為1。下面構(gòu)造X client,按Ctrl+Alt+F1回到剛才的CUI(Ctrl+Alt+F7對(duì)應(yīng)本機(jī)的第一個(gè)啟動(dòng)的X server,Ctrl+Alt+F8對(duì)應(yīng)第二個(gè),有人說F7對(duì)應(yīng)屏幕編號(hào)為0的X server實(shí)際上是不對(duì)的,如果第一個(gè)啟動(dòng)的屏幕編號(hào)為1,第二個(gè)啟動(dòng)的編號(hào)為0,則F7對(duì)應(yīng)1屏幕,F(xiàn)8對(duì)應(yīng)0屏幕),運(yùn)行命令: xdkui@Debian:~$xeyes -display localhost:1&

    然后按Ctrl+Alt+F7,看到我們的X client也就是xeyes了吧。再回到CUI,運(yùn)行
    xdkui@Debian:~$X&
    開啟一個(gè)屏幕編號(hào)0的X server,CUI下再運(yùn)行
    xdkui@Debian:~$xterm&

    這時(shí)Ctrl+Alt+F7對(duì)應(yīng)屏幕編號(hào)1;而F8對(duì)應(yīng)屏幕編號(hào)0,且其X client為xterm。先退出上面的兩個(gè)X server,下面復(fù)雜點(diǎn)手動(dòng)啟動(dòng)我們的gnome吧,首先
    xdkui@Debian:~$X&
    然后
    xdkui@Debian:~$gnome-session

    看到的就和用startx 啟動(dòng)的X一樣了,這時(shí)X server是X這個(gè)程序,X client是gnome-session及其啟動(dòng)的窗口管理器等程序。看到這里感覺xinit用處并不大(??不知是否正確),簡單的腳本就可以實(shí)現(xiàn)。本來想把xinit反匯編了分析下,可懶得搞了^_^這是位于本機(jī)的情況,對(duì)于X server和X client位于不同主機(jī)的情況見下面本文第三部分。

    個(gè)人感覺對(duì)于X Window System,搞清楚X server與X client關(guān)系很重要。一般X server很簡單,就是/usr/bin/X11/X程序;X client則花樣繁多,從高級(jí)的CDE,GNOME,KDE,到低級(jí)一點(diǎn)的只有twm,Window Maker,blackbox等窗口管理器,再到最簡陋的只有xterm,rxvt,xeyes等單個(gè)x程序。正是由于X client的各種搭配,使得我們的X Window System看起來多樣化。這可能也是X Window System最大的賣點(diǎn)之一吧 ^_^

    三) 跨網(wǎng)絡(luò)運(yùn)行X Window System
    一般用來做服務(wù)器的系統(tǒng)(Linux,FreeBSD,Solaris等等) 都不會(huì)裝X server,甚至很多都沒有顯示器。這樣可以在這些系統(tǒng)里安裝簡單的X client,以GUI的方式遠(yuǎn)程顯示在管理員們所坐的X server里。我們實(shí)驗(yàn)室用FreeBSD做網(wǎng)關(guān),提供WWW,FTP服務(wù),一般在管理員的本地機(jī)器起個(gè)X server,然后ssh或telnet上網(wǎng)關(guān)運(yùn)行X client程序顯示在本地顯示器上,當(dāng)然,也可用XDMCP(X Display Manager Control Protocol),man xsession里提到/etc/X11/Xsession一般被startx(我的/etc/X11/xinit/xinitrc里調(diào)用 Xsession腳本)或display manager調(diào)用,但有的display manager只調(diào)用Xsession而不是xinitrc,故為了startx和display manager兩種方式下都可正常啟動(dòng)GUI,最好把X client啟動(dòng)的程序放在Xsession文件里。遠(yuǎn)程運(yùn)行X client程序需要設(shè)置DISPLAY環(huán)境變量,設(shè)置為 主機(jī)名稱:屏幕編號(hào)(如192.168.1.2:0,則表示X server是192.168.1.2這臺(tái)機(jī)器上的0號(hào)屏幕);或是給X client程序加個(gè)—display參數(shù)。由于條件限制,只測(cè)試了位于TCP/IP網(wǎng)絡(luò)環(huán)境,X server為192.168.1.2,X client為192.168.1.1。

    1) Windows系統(tǒng)做X server
    a) 用ssh或telnet方式
    Windows下面的X server軟件有很多種,我這里使用X-win32。在Windows里運(yùn)行X-win32程序,則相當(dāng)于本地機(jī)器是個(gè)X server。遠(yuǎn)程登錄上Debian(我這里是用VMware仿真網(wǎng)絡(luò)環(huán)境,直接進(jìn)虛擬機(jī)即可^_^),運(yùn)行:
    xdkui@xclient:~$export DISPLAY=192.168.1.2:0
    xdkui@xclient:~$xterm&
    這時(shí)即在Windows里的X server里看到了xterm了,至于X client還運(yùn)行什么程序就看你的需要了,文件管理器阿,資源查看器等。當(dāng)然,這里X-win32要設(shè)置好授權(quán),好像默認(rèn)是禁止接入控制,即任何X client都可使用這個(gè)X server。

    b) XDMCP方式
    常見的Display Manager有xdm,gdm,kdm等。我這里使用的是gdm。需要修改gdm的配置文件/etc/X11/gdm/gdm.conf,修改 [xdmcp]段的Enable=true,使得可以遠(yuǎn)程登錄,在X client運(yùn)行g(shù)dm。
    在X-win32里建一個(gè)XDMCP的session,查詢方式,填入IP為運(yùn)行g(shù)dm的機(jī)器地址。連接,即可看到登錄界面,下面的就不用說了,享受吧

    2) Linux與Linux互聯(lián)
    a) ssh或telnet方式
    在linux 本地起個(gè)X server,需要注意授權(quán)問題,建立文件/etc/X0.hosts,填入X client的IP192.168.1.1,其中X0.hosts表示本地第0個(gè)屏幕允許連接的X client地址,建立X1.hosts文件則是本地第1個(gè)屏幕允許連接的X client地址,以此類推,man xserver里有。運(yùn)行
    xdkui@xserver:~$X&
    運(yùn)行該程序時(shí)別加-nolisten參數(shù),否則不會(huì)在網(wǎng)絡(luò)上偵聽。
    這個(gè)時(shí)候Ctrl+Alt+F7是X server,返回Ctrl+Alt+F1還可以ssh上X client機(jī)器上。
    然后登錄上X client,運(yùn)行
    xdkui@xclient:~$xterm –display 192.168.1.2:0
    即可在本地的X server里看到xterm了,如果有的話,還可把gnome-session也顯示在本地來。同樣可以在linux里的VMware里做這個(gè)測(cè)試,需要用點(diǎn)手腕了^_^見下

    b) XDMCP方式
    在我們的X client里運(yùn)行g(shù)dm(別忘了修改gdm.conf),然后在本地X server的CUI下面運(yùn)行X -query 192.168.1.1(X client開gdm機(jī)器的地址)。可以看到登錄界面了吧。
    我是在linux里的VMware里做的測(cè)試,說說所用的手腕吧。在Ctrl+Alt+F1的CUI下正常運(yùn)行startx&啟動(dòng)GUI,這時(shí) Ctrl+Alt+F7即為我的X server,X client啟動(dòng)的gnome,然后在這里運(yùn)行VMware打開Debian虛擬機(jī),并運(yùn)行g(shù)dm。然后回到Ctrl+Alt+F1,運(yùn)行X :1 -query 192.168.1.1。看到登錄界面了吧。這時(shí)Ctrl+Alt+F7為我的0號(hào)屏幕,里面運(yùn)行了虛擬機(jī)。Ctrl+Alt+F8為1號(hào)屏幕,在遠(yuǎn)程 GUI登錄X client。相當(dāng)于我在本地起了兩個(gè)X server。

    X Window System設(shè)計(jì)的真是相當(dāng)神奇,使用方法更是眼花繚亂。

    posted on 2006-02-24 17:37 銀色幻想 閱讀(215) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产香蕉人人爽成AV片久久 | 男女一边桶一边摸一边脱视频免费 | 精品久久久久亚洲| 午夜免费福利在线观看| 亚洲欧美日韩综合俺去了| 性一交一乱一视频免费看| 亚洲а∨精品天堂在线| 免费a在线观看播放| 乱爱性全过程免费视频| 亚洲女久久久噜噜噜熟女| 免费观看一区二区三区| 老色鬼久久亚洲AV综合| 九九精品免费视频| 亚洲欧美黑人猛交群| 国产一级高清视频免费看| 九九久久精品国产免费看小说 | 精品国产免费一区二区三区| 超清首页国产亚洲丝袜| 久久香蕉国产线看免费| 中文字幕乱码亚洲精品一区| 四虎永久免费地址在线观看| 九九免费久久这里有精品23| 亚洲国产高清视频| 女人18毛片免费观看| aa午夜免费剧场| 亚洲黄色中文字幕| 韩国日本好看电影免费看| 成人网站免费大全日韩国产| 亚洲视频一区网站| 免费国产成人午夜电影| 久久青草91免费观看| 亚洲欧美日韩中文高清www777| 亚洲国产中文v高清在线观看| 免费精品99久久国产综合精品| 色天使亚洲综合在线观看| 亚洲国产精品人人做人人爽 | 免费无码H肉动漫在线观看麻豆| 亚洲一区二区三区免费视频| 国产偷窥女洗浴在线观看亚洲| 最近免费视频中文字幕大全| 亚洲a∨国产av综合av下载|