久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

D-Bus完全指南:Linux進(jìn)程間通信的核心機(jī)制與實(shí)戰(zhàn)排查

D-Bus完全指南:Linux進(jìn)程間通信的核心機(jī)制與實(shí)戰(zhàn)排查 DBus這個(gè)單詞只要你在Linux桌面上待過一陣子就繞不開它。但不夸張地說很多人用了十年Linux天天在跟它打交道卻始終說不清它到底是個(gè)什么玩意兒。我最早接觸它是因?yàn)閷懽烂嫘」ぞ邥r(shí)要跟系統(tǒng)通知服務(wù)打招呼后來又因?yàn)樵谇度胧皆O(shè)備上排查進(jìn)程通信問題不得不把它的底層機(jī)制徹底啃了一遍。今天就把這筆賬理清楚D-Bus是什么、它解決什么問題、怎么用、以及排坑時(shí)會(huì)遇到哪些經(jīng)典場(chǎng)面。這篇文章適合這樣幾類人看寫Linux桌面應(yīng)用或嵌入式Qt應(yīng)用的開發(fā)者被systemctl、NetworkManager、藍(lán)牙這類服務(wù)背后通信機(jī)制搞暈的運(yùn)維和工程師以及剛接觸Linux進(jìn)程通信、想搞明白這套機(jī)制和socket、共享內(nèi)存有什么不同的新手。我盡量把原理講透同時(shí)把能直接上手的東西都給你。1. 為什么要先聊IPC在回答“DBus是什么”之前得先退一步看看它到底解決什么問題。你可能聽過下面這句話D-Bus是Linux上的進(jìn)程間通信機(jī)制常用于桌面系統(tǒng)和系統(tǒng)服務(wù)之間傳遞消息。這句話本身沒錯(cuò)但太干癟了。真正讓我意識(shí)到它價(jià)值的是這樣一個(gè)場(chǎng)景你桌面上有一個(gè)音樂播放器你按了一下鍵盤上的媒體鍵桌面環(huán)境比如GNOME或KDE要知道這件事還要把它告訴播放器去暫停播放。這里發(fā)生的事就是典型的進(jìn)程間通信IPCInter-Process Communication。兩個(gè)完全獨(dú)立的進(jìn)程誰也不知道對(duì)方長什么樣需要一種機(jī)制來完成一次跨進(jìn)程調(diào)用。Linux下實(shí)現(xiàn)進(jìn)程間通信的手段不少管道、共享內(nèi)存、信號(hào)、Unix域套接字、TCP socket……為什么還要有DBus這個(gè)東西因?yàn)榍懊孢@些方案在面對(duì)“一對(duì)多、動(dòng)態(tài)發(fā)現(xiàn)、基于名字尋址”這類需求時(shí)非常別扭而桌面系統(tǒng)和現(xiàn)代Linux系統(tǒng)服務(wù)恰恰就是這種需求。1.1 進(jìn)程間通信的原始形態(tài)先看看傳統(tǒng)IPC長什么樣。命名管道和Unix域套接字Unix Socket是比較接近D-Bus的實(shí)現(xiàn)方式兩個(gè)進(jìn)程約定一個(gè)固定的路徑比如/tmp/xxx.sock一個(gè)負(fù)責(zé)監(jiān)聽一個(gè)負(fù)責(zé)連接之后在這個(gè)鏈路上收發(fā)字節(jié)流。這種模式在小規(guī)模場(chǎng)景下沒問題但一旦進(jìn)程變多麻煩就來了。你每個(gè)應(yīng)用都得維護(hù)一張“誰在哪個(gè)socket上”的清單而且服務(wù)端和客戶端要約定好消息格式。想象一下系統(tǒng)里有NetworkManager、藍(lán)牙服務(wù)、系統(tǒng)通知、媒體播放器、桌面面板……一共十幾個(gè)服務(wù)每個(gè)服務(wù)都各自開一個(gè)socket客戶端程序得跟十幾個(gè)對(duì)方全部建立起連接還都得處理斷線重連、消息解析、狀態(tài)同步。這套代碼寫出來光是維護(hù)就夠你喝一壺的。共享內(nèi)存則更底層它適合大批量數(shù)據(jù)傳輸?shù)举|(zhì)上不解決誰通知誰、誰調(diào)用誰的問題。信號(hào)signal是最輕量級(jí)的但它只能傳遞一個(gè)編號(hào)傳不了復(fù)雜數(shù)據(jù)結(jié)構(gòu)在應(yīng)用層做RPC遠(yuǎn)程過程調(diào)用完全不夠用。所以你需要一個(gè)“中間人”和一套統(tǒng)一的“對(duì)話規(guī)則”這正是D-Bus的切入點(diǎn)。1.2 DBus相對(duì)傳統(tǒng)IPC的演進(jìn)思路D-Bus的誕生背景是freedesktop.org組織為Linux桌面環(huán)境統(tǒng)一通信協(xié)議而設(shè)計(jì)的時(shí)間大概在2003年前后。它借鑒了當(dāng)時(shí)GNOME的Bonobo和KDE的DCOP兩套機(jī)制的失敗經(jīng)驗(yàn)最終形成了一個(gè)比DCOP更通用、比CORBA更輕量的方案。它做的事情可以概括成四句話提供一個(gè)中央總線central bus所有進(jìn)程都往總線上接互相之間不必直接兩兩連接。用“總線名”代替文件路徑和socket地址實(shí)現(xiàn)進(jìn)程的動(dòng)態(tài)發(fā)現(xiàn)A進(jìn)程不需要事先知道B進(jìn)程的地址。定義了一套二進(jìn)制消息協(xié)議支持方法調(diào)用、信號(hào)廣播、屬性讀寫三類基本操作底層傳輸走Unix域套接字或TCP。自帶服務(wù)激活機(jī)制當(dāng)一個(gè)客戶端請(qǐng)求某個(gè)服務(wù)時(shí)如果該服務(wù)還沒啟動(dòng)總線守護(hù)進(jìn)程可以幫你把它拉起來。這套設(shè)計(jì)讓“誰提供什么服務(wù)”變成一種可查詢、可動(dòng)態(tài)變化的資源而不是寫死在代碼里的連接。DBus等于是在Linux進(jìn)程之間建立了一個(gè)輕量的“軟件總線”設(shè)備、服務(wù)、桌面組件都插在這條總線上交流。2. DBus的整體架構(gòu)與核心概念理解了它要解決的問題再來看架構(gòu)就順多了。D-Bus從上到下分成三層來看底層是傳輸層基于socket的字節(jié)流中間是消息協(xié)議層消息的封裝、序列化、路由最上層是應(yīng)用使用的API綁定層比如GLib的GDBus、Qt的QtDBus、Python的dbus庫以及systemd自己用的sd-bus。實(shí)際在你的Linux系統(tǒng)里跑起來的主要是兩套東西一個(gè)守護(hù)進(jìn)程叫dbus-daemon發(fā)行版里也可能看到dbus-broker這是后來性能更好的替代實(shí)現(xiàn)負(fù)責(zé)維護(hù)總線、轉(zhuǎn)發(fā)消息、管理服務(wù)激活另一套是各個(gè)應(yīng)用鏈接的libdbus庫或者更上層的語言綁定。很多后端服務(wù)比如NetworkManager、systemd、藍(lán)牙服務(wù)bluez、UDisks2都注冊(cè)在總線上供外部調(diào)用。2.1 總線守護(hù)進(jìn)程是核心dbus-daemon是一個(gè)獨(dú)立的進(jìn)程你通過ps aux | grep dbus應(yīng)該能看到它。它負(fù)責(zé)收發(fā)和轉(zhuǎn)發(fā)所有的總線消息。它的工作方式可以用“郵局”來類比每個(gè)進(jìn)程在總線上注冊(cè)時(shí)相當(dāng)于郵局給它分配了一個(gè)郵箱一個(gè)唯一的連接名進(jìn)程想給別的進(jìn)程發(fā)消息就把消息投遞到郵局由郵局按地址送到對(duì)方郵箱。這里有個(gè)關(guān)鍵點(diǎn)通信雙方之間并不直接建立P2P連接消息總是經(jīng)過守護(hù)進(jìn)程轉(zhuǎn)發(fā)。這樣做的代價(jià)是多了一次轉(zhuǎn)發(fā)延遲消息從發(fā)送進(jìn)程到守護(hù)進(jìn)程再從守護(hù)進(jìn)程到接收進(jìn)程兩次unix socket讀寫但換來的是全系統(tǒng)的統(tǒng)一尋址、權(quán)限控制和狀態(tài)管理。這在一個(gè)進(jìn)程幾十個(gè)的桌面環(huán)境里是絕對(duì)劃算的。dbus-daemon的配置文件通常在這些位置/usr/share/dbus-1/system.conf系統(tǒng)總線/usr/share/dbus-1/session.conf會(huì)話總線/etc/dbus-1/system.d/系統(tǒng)服務(wù)安全策略/usr/share/dbus-1/system.d/發(fā)行版自帶服務(wù)策略/usr/share/dbus-1/services/session bus服務(wù)激活文件/usr/share/dbus-1/system-services/system bus服務(wù)激活文件2.2 連接的端點(diǎn)、地址與名字D-Bus里面最重要的是“名字”。所有連接到總線上的進(jìn)程都至少有一個(gè)地址標(biāo)識(shí)主要有三類總線地址Bus Address實(shí)際連接的物理位置是一個(gè)類似unix:path/run/dbus/system_bus_socket的字符串。它相當(dāng)于普通socket的地址通常在進(jìn)程連接總線時(shí)使用日常開發(fā)中很少直接涉及。唯一連接名Unique Connection Name進(jìn)程連接總線成功后守護(hù)進(jìn)程分配的名字形如:1.42。它相當(dāng)于郵局分配的郵箱號(hào)保證唯一。眾所周知的名稱Well-known Name一個(gè)類似反向域名的字符串比如org.freedesktop.NetworkManager、org.bluez。它相當(dāng)于一個(gè)服務(wù)的“固定呼號(hào)”其他進(jìn)程只需要記這個(gè)名字不需要關(guān)心服務(wù)到底用什么唯一名稱。比如你告訴總線“我要發(fā)給org.freedesktop.Notifications”守護(hù)進(jìn)程會(huì)自動(dòng)把消息路由給持有這個(gè)名字的進(jìn)程。好比你打電話不需要知道對(duì)方今天的SIM卡號(hào)只要記住他的固定號(hào)碼。這也是D-Bus能實(shí)現(xiàn)“服務(wù)動(dòng)態(tài)上線、客戶端無需關(guān)心”的核心原因。2.3 消息的格式與信號(hào)傳遞總線上的通信單元是“消息”Message。D-Bus消息分為四種基本類型消息類型作用類比method_call調(diào)用遠(yuǎn)端進(jìn)程的方法“幫我執(zhí)行某個(gè)函數(shù)”method_return返回調(diào)用結(jié)果“這是執(zhí)行結(jié)果”signal廣播一個(gè)事件“我這邊發(fā)生了某某事件”error返回錯(cuò)誤信息“調(diào)用失敗了這是原因”信號(hào)是D-Bus非常出彩的設(shè)計(jì)。它是一對(duì)多的廣播任何進(jìn)程都能向總線發(fā)送一條signal總線會(huì)把它轉(zhuǎn)發(fā)給所有對(duì)該信號(hào)感興趣的進(jìn)程而不需要發(fā)出者知道有哪些進(jìn)程在聽。桌面鎖屏、網(wǎng)絡(luò)狀態(tài)切換、USB設(shè)備插入這些都是靠signal廣播出去的??蛻舳送ǔMㄟ^“匹配規(guī)則”match rule訂閱自己關(guān)心的信號(hào)比如只接收org.freedesktop.NetworkManager發(fā)出的狀態(tài)變化。信號(hào)強(qiáng)度被我在實(shí)際項(xiàng)目中反復(fù)驗(yàn)證比如讓兩個(gè)完全不相識(shí)的進(jìn)程做聯(lián)動(dòng)A進(jìn)程廣播一個(gè)“文件導(dǎo)入完成”B進(jìn)程什么都不用知道只要訂閱了這個(gè)信號(hào)就能做出響應(yīng)。你完全繞開了一對(duì)一socket連接那一堆連接管理代碼。2.4 對(duì)象、接口、方法與屬性模型D-Bus之上還不是簡(jiǎn)單的“發(fā)消息”而是一個(gè)RPC風(fēng)格的調(diào)用模型。它約定了一種“對(duì)象路徑 接口 方法/信號(hào)/屬性”的三段式結(jié)構(gòu)。對(duì)象路徑Object Path形如/org/freedesktop/NetworkManager類似URL路徑用來定位服務(wù)內(nèi)部的某個(gè)對(duì)象。注意這里的對(duì)象是邏輯概念服務(wù)端可以用任意語言實(shí)現(xiàn)它。接口Interface形如org.freedesktop.DBus.Properties或org.bluez.Device1聲明了對(duì)象提供哪些方法和信號(hào)。接口名和總線名類似也是反向域名風(fēng)格避免沖突。方法Method、信號(hào)Signal、屬性Property接口里面可以定義這些成員。方法與本地函數(shù)調(diào)用相似只是跨進(jìn)程信號(hào)供外部訂閱屬性代表該對(duì)象的當(dāng)前狀態(tài)可讀或可寫。舉個(gè)例子通過D-Bus讓藍(lán)牙設(shè)備斷開連接你會(huì)看到類似這樣的調(diào)用目標(biāo)總線名org.bluez由藍(lán)牙服務(wù)持有對(duì)象路徑/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX表示某個(gè)已配對(duì)設(shè)備接口org.bluez.Device1方法Disconnect這套模型把事情整理得非常規(guī)整無論底層是誰在實(shí)現(xiàn)調(diào)用方的代碼結(jié)構(gòu)都是統(tǒng)一的。3. 兩條主干道System Bus與Session Bus你的Linux系統(tǒng)上其實(shí)跑著至少兩個(gè)總線實(shí)例。大多數(shù)人第一次被D-Bus弄暈就是因?yàn)闆]搞清這兩個(gè)東西的分工。3.1 system bus與session bus的分工System Bus是系統(tǒng)級(jí)總線從開機(jī)就運(yùn)行負(fù)責(zé)承載系統(tǒng)服務(wù)之間的通信比如systemd、NetworkManager、UDisks2、藍(lán)牙守護(hù)進(jìn)程都注冊(cè)在這條總線上。它對(duì)應(yīng)socket文件通常在/run/dbus/system_bus_socket并且普通用戶對(duì)它沒有寫權(quán)限——這是有意的安全設(shè)計(jì)。Session Bus是每個(gè)用戶登錄時(shí)啟動(dòng)的會(huì)話總線負(fù)責(zé)承載桌面環(huán)境內(nèi)部各組件的通信。GNOME Shell、文件管理器、通知服務(wù)、剪貼板管理、媒體播放器都在這條總線上聊天。每個(gè)登錄用戶都有自己的session bussocket路徑類似/run/user/1000/bus其中1000是用戶ID。同一個(gè)人登錄兩個(gè)會(huì)話比如本地桌面和SSH里的systemd user實(shí)例就有兩條獨(dú)立的session bus。為什么必須分開如果大家都擠在同一條總線上一個(gè)普通用戶就能給系統(tǒng)服務(wù)發(fā)消息或者監(jiān)聽別人桌面組件的通信。分開之后系統(tǒng)總線上可以施加嚴(yán)格的安全策略session bus只對(duì)當(dāng)前可信的桌面會(huì)話開放。這種分層和物理網(wǎng)絡(luò)里的核心網(wǎng)、接入網(wǎng)分開在邏輯上是一個(gè)道理。3.2 服務(wù)激活機(jī)制D-Bus還有一個(gè)讓人省心的機(jī)制——服務(wù)激活Service Activation。設(shè)想這樣一個(gè)場(chǎng)景你調(diào)用org.freedesktop.Notifications發(fā)通知但這個(gè)服務(wù)還沒啟動(dòng)。傳統(tǒng)socket方案會(huì)直接連接失敗而D-Bus總線發(fā)現(xiàn)這個(gè)well-known name無人持有的話會(huì)去掃描激活文件目錄找到org.freedesktop.Notifications.service這個(gè)文件根據(jù)文件里指定的Exec命令把服務(wù)拉起來等它注冊(cè)到總線上再完成這次調(diào)用。system bus同樣存在激活機(jī)制systemd甚至深度參與其中——很多系統(tǒng)服務(wù)在D-Bus配置文件里通過SystemdService關(guān)聯(lián)到一個(gè)systemd unit。當(dāng)收到D-Bus請(qǐng)求時(shí)dbus-daemon或dbus-broker會(huì)觸發(fā)systemd啟動(dòng)對(duì)應(yīng)的unit。這也是為什么你調(diào)用某個(gè)還沒啟動(dòng)的系統(tǒng)服務(wù)時(shí)服務(wù)的進(jìn)程會(huì)“嗖”地一下出現(xiàn)在進(jìn)程列表里。system bus和systemd之間的這種配合讓“按需啟動(dòng)”成為系統(tǒng)服務(wù)常態(tài)。3.3 傳統(tǒng)桌面為何以Session Bus為主如果你是在寫桌面客戶端絕大部分日常操作都走session bus。比如你的應(yīng)用想監(jiān)聽系統(tǒng)音量調(diào)整、屏幕鎖定、網(wǎng)絡(luò)變化這些信號(hào)大多數(shù)由桌面會(huì)話內(nèi)的專屬組件發(fā)出。而如果應(yīng)用想控制NetworkManager連接Wi-Fi那是調(diào)用system bus上的服務(wù)需要管理員權(quán)限時(shí)再通過polkit一個(gè)D-Bus上的特權(quán)授權(quán)服務(wù)去申請(qǐng)授權(quán)。判斷一個(gè)服務(wù)到底走哪條總線有一個(gè)簡(jiǎn)單經(jīng)驗(yàn)系統(tǒng)級(jí)服務(wù)、需要特權(quán)或者影響整個(gè)系統(tǒng)的走system bus桌面會(huì)話級(jí)、只跟當(dāng)前用戶UI相關(guān)的走session bus。實(shí)際項(xiàng)目里也有跨總線的情況比如桌面面板要讀取網(wǎng)絡(luò)狀態(tài)它會(huì)同時(shí)連接兩條總線分別跟不同的服務(wù)通信。4. 實(shí)操命令行工具與開發(fā)實(shí)踐理論講完直接上手。我建議用最少必要步驟把D-Bus“跑通”建立體感。Linux桌面環(huán)境通常都帶dbus-send和dbus-monitor兩個(gè)命令有些發(fā)行版需要額外安裝dbus-tools包。再配合一個(gè)圖形化工具d-feet做瀏覽基本夠你用很久。4.1 五分鐘體驗(yàn)用dbus-send查詢與調(diào)用先看最基礎(chǔ)的兩個(gè)子命令我強(qiáng)烈建議你親手敲一遍# 列出session bus上所有持有名字的服務(wù) dbus-send --session --destorg.freedesktop.DBus --typemethod_call \ --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames解析一下--destorg.freedesktop.DBus表示發(fā)給總線守護(hù)進(jìn)程本身它也是一個(gè)D-Bus服務(wù)對(duì)象路徑是/org/freedesktop/DBus調(diào)用接口org.freedesktop.DBus上的ListNames方法。返回結(jié)果是一長串字符串列表這些就是當(dāng)前總線上所有服務(wù)名。你會(huì)看到org.freedesktop.Notifications、org.gnome.Shell之類。再試試調(diào)用一個(gè)真實(shí)服務(wù)。以通知為例前提是你桌面有通知服務(wù)dbus-send --session --destorg.freedesktop.Notifications \ --typemethod_call --print-reply \ /org/freedesktop/Notifications \ org.freedesktop.Notifications.Notify \ string:my-app uint32:0 string:dialog-information \ string:Hello from D-Bus string:這是通過D-Bus發(fā)送的通知 \ string:[] dict:string:variant:{} int32:5000這行命令完整演示了帶多個(gè)參數(shù)的調(diào)用應(yīng)用名、替換id、圖標(biāo)名、摘要、正文、動(dòng)作列表、提示參數(shù)、超時(shí)時(shí)間。執(zhí)行之后桌面右上角應(yīng)該會(huì)彈出一條通知。能做到這一點(diǎn)說明你已經(jīng)掌握D-Bus作為RPC的使用方式了。如果要看系統(tǒng)總線上有什么把--session換成--system。注意普通用戶對(duì)system bus很多send操作會(huì)被安全策略攔截所以觀察為主。4.2 用dbus-monitor監(jiān)聽信號(hào)監(jiān)聽信號(hào)是排查問題時(shí)的利器。打開一個(gè)終端dbus-monitor --session然后你去干點(diǎn)別的比如切換一下壁紙、調(diào)整音量、鎖屏再解鎖終端里會(huì)不斷滾動(dòng)出各種method_call和signal消息。初次看到會(huì)覺得這是天書但仔細(xì)看能發(fā)現(xiàn)消息結(jié)構(gòu)跟前面講的對(duì)象路徑、接口、方法一一對(duì)應(yīng)。信號(hào)消息會(huì)有signal字樣和對(duì)應(yīng)的interface/member名。如果想只看特定的服務(wù)可以用match參數(shù)。比如只看NetworkManager的狀態(tài)變化dbus-monitor --system interfaceorg.freedesktop.NetworkManager監(jiān)聽信號(hào)這個(gè)動(dòng)作本身非常有價(jià)值——它能幫你驗(yàn)證“某個(gè)操作到底有沒有在總線上打消息”也是排查D-Bus調(diào)用是否成功的第一手證據(jù)。4.3 用d-feet可視化瀏覽總線終端命令適合快速驗(yàn)證但真要瀏覽整個(gè)總線上有哪些服務(wù)、每個(gè)服務(wù)提供哪些對(duì)象和接口圖形化工具d-feet有的發(fā)行版包名叫d-feet或dfeet是效率最高的。打開之后左邊選System Bus或Session Bus展開某一個(gè)服務(wù)名右側(cè)會(huì)顯示對(duì)象樹點(diǎn)開接口能看到方法和信號(hào)列表雙擊方法可以直接填參數(shù)調(diào)用。這個(gè)工具在我調(diào)試藍(lán)牙服務(wù)的時(shí)候幫了大忙不用翻文檔也能很快搞清楚某個(gè)接口有哪些方法、參數(shù)類型是什么。它等于一個(gè)D-Bus接口的“瀏覽器”。調(diào)試的時(shí)候我習(xí)慣先開d-feet找到服務(wù)提供的方法再用dbus-send在腳本里復(fù)現(xiàn)同樣的調(diào)用。4.4 用Python綁定寫一個(gè)最小調(diào)用如果你要寫代碼我推薦先用Python把鏈路跑通因?yàn)檎Z法最直觀。Linux桌面通常自帶python3-dbus或者python3-gi后者是基于GLib的GDBus綁定功能更全。下面這個(gè)例子用python3-gi調(diào)NetworkManager獲取連接狀態(tài)import gi gi.require_version(Gio, 2.0) from gi.repository import Gio bus Gio.bus_get_sync(Gio.BusType.SYSTEM, None) # 調(diào)用NetworkManager的org.freedesktop.DBus.Properties接口讀取ActiveConnections屬性 result bus.call_sync( Gio.BusType.SYSTEM, # 系統(tǒng)總線 org.freedesktop.NetworkManager, # 目標(biāo)總線名 /org/freedesktop/NetworkManager, # 對(duì)象路徑 org.freedesktop.DBus.Properties, # 接口名 Get, # 方法名Get GLib.Variant((ss), (org.freedesktop.NetworkManager, ActiveConnections)), None, Gio.DBusCallFlags.NONE, -1, None ) if result: print(result)如果你更習(xí)慣用經(jīng)典的dbus-python庫寫法是這樣import dbus bus dbus.SystemBus() # 獲得NetworkManager的代理對(duì)象 nm bus.get_object(org.freedesktop.NetworkManager, /org/freedesktop/NetworkManager) props dbus.Interface(nm, org.freedesktop.DBus.Properties) connections props.Get(org.freedesktop.NetworkManager, ActiveConnections) print(connections)兩者的差別主要是編程模型GDBus偏異步和回調(diào)dbus-python偏同步和對(duì)象代理。小工具用dbus-python夠用大型應(yīng)用建議直接上GDBus它的類型系統(tǒng)更嚴(yán)謹(jǐn)而且跟GLib主循環(huán)天然配合。4.5 用GDBus或QtDBus做正式項(xiàng)目真正落地到項(xiàng)目里語言綁定選擇很重要。C語言項(xiàng)目一般用GDBusGLib自帶或者sd-bussystemd內(nèi)置的C庫。GDBus的好處是類型檢查和文檔齊全sd-bus更輕量性能也更好但它依賴systemd的libsystemd。C/Qt項(xiàng)目首選QtDBus它把QDBusMessage、QDBusInterface封裝得比較自然跟Qt的信號(hào)槽機(jī)制融合得很好。嵌入式場(chǎng)景下如果你自己寫守護(hù)進(jìn)程對(duì)外提供服務(wù)用sd-bus注冊(cè)一個(gè)服務(wù)名的樣板代碼量很小鏈路的穩(wěn)定性也比直接裸寫unix socket高很多。GDBus和sd-bus選型上有一條經(jīng)驗(yàn)項(xiàng)目已經(jīng)依賴GLib就用GDBus項(xiàng)目跟systemd生態(tài)深度綁定就選sd-bus兩邊都不沾就看團(tuán)隊(duì)熟悉度。5. 安全模型與權(quán)限控制D-Bus的安全值得單獨(dú)劃一章說因?yàn)榭邕M(jìn)程通信的本質(zhì)就是跨信任邊界。你通過總線調(diào)用的任意一個(gè)方法都等同于賦予對(duì)方訪問你的數(shù)據(jù)或控制設(shè)備的能力。5.1 安全策略配置誰能調(diào)誰dbus-daemon對(duì)system bus默認(rèn)有較嚴(yán)格的策略。配置文件目錄里每個(gè)服務(wù)對(duì)應(yīng)一個(gè).conf文件。例如一個(gè)典型的系統(tǒng)服務(wù)策略文件長這樣busconfig policy userroot allow ownorg.example.MyService/ allow send_destinationorg.example.MyService/ /policy policy contextdefault deny send_destinationorg.example.MyService/ /policy /busconfig解讀一下own表示誰可以注冊(cè)這個(gè)名字send_destination表示誰可以往這個(gè)服務(wù)發(fā)消息。上面策略的意思是只有root用戶能擁有org.example.MyService這個(gè)名字其他任何人對(duì)它發(fā)消息都被拒絕。如果需要普通用戶也能調(diào)用就得把用戶放進(jìn)某個(gè)group或者主動(dòng)添加一個(gè)allow規(guī)則policy contextdefault allow send_destinationorg.example.MyService/ allow send_destinationorg.example.MyService send_interfaceorg.example.MyInterface/ /policy通常的做法是只放開必要的接口而不是全部接口。比如允許普通用戶調(diào)用查詢方法但拒絕管理方法。這一點(diǎn)我踩過坑早期圖省事全放開了結(jié)果任何本地用戶都能通過D-Bus修改服務(wù)配置日志審計(jì)很難看。所以寫系統(tǒng)服務(wù)時(shí)策略文件的粒度一定要細(xì)化到接口。5.2 特權(quán)操作與polkit很多系統(tǒng)管理操作需要管理員權(quán)限比如連接Wi-Fi、掛載磁盤。D-Bus本身不做授權(quán)生產(chǎn)環(huán)境中這項(xiàng)工作通常交給polkitPolicyKit。流程大致是這樣客戶端調(diào)用NetworkManager的Connect方法NetworkManager收到請(qǐng)求后用polkit的API詢問“這個(gè)調(diào)用者是否有權(quán)限執(zhí)行這個(gè)動(dòng)作”polkit會(huì)根據(jù)調(diào)用者的用戶ID、動(dòng)作ID、活動(dòng)會(huì)話狀態(tài)是否在本地登錄、是否處于活躍會(huì)話做出判定必要時(shí)彈出認(rèn)證對(duì)話框認(rèn)證通過后polkit回復(fù)授權(quán)NetworkManager才繼續(xù)執(zhí)行。所以你看到“插入U(xiǎn)SB后桌面彈出密碼框”本質(zhì)上就是一個(gè)D-Bus調(diào)用觸發(fā)了polkit授權(quán)流程。自己寫系統(tǒng)級(jí)守護(hù)進(jìn)程時(shí)如果包含敏感操作用polkit做授權(quán)比自己在代碼里判斷用戶身份要規(guī)范得多。5.3 兩條總線的安全邊界Session bus默認(rèn)信任當(dāng)前用戶策略通常比較寬松。System bus則嚴(yán)格得多。這種設(shè)計(jì)的風(fēng)險(xiǎn)邊界要心里有數(shù)同一個(gè)用戶的所有進(jìn)程都能訪問同一個(gè)session bus因此session bus上的服務(wù)不應(yīng)該承擔(dān)“隔離敏感數(shù)據(jù)”的任務(wù)。如果兩個(gè)進(jìn)程屬于同一個(gè)用戶但信任等級(jí)不同比如一個(gè)是瀏覽器一個(gè)是你的密碼管理器它們同時(shí)連在session bus上從機(jī)制上講瀏覽器有權(quán)限向密碼管理器發(fā)請(qǐng)求你得靠密碼管理器自己實(shí)現(xiàn)接口級(jí)鑒權(quán)。這也是提醒自己D-Bus的權(quán)限模型只是框架真正決定安全的是服務(wù)實(shí)現(xiàn)里怎么校驗(yàn)請(qǐng)求。6. 常見問題與排查技巧實(shí)錄最后一部分直接上排障經(jīng)驗(yàn)。D-Bus是Linux桌面上最頻繁出問題的“隱形基礎(chǔ)設(shè)施”之一我把這些年遇到的典型問題和排查套路整理成下面的速查表?,F(xiàn)象典型原因排查方法dbus-send提示Error org.freedesktop.DBus.Error.ServiceUnknown目標(biāo)服務(wù)未啟動(dòng)或尚未注冊(cè)名字dbus-send --session --destorg.freedesktop.DBus --typemethod_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames看名字是否存在等待服務(wù)啟動(dòng)后重試dbus-monitor有信號(hào)但應(yīng)用收不到匹配規(guī)則寫錯(cuò)信號(hào)在錯(cuò)誤的總線session/page上檢查match參數(shù)里的interface/member是否準(zhǔn)確確認(rèn)監(jiān)聽的總線與發(fā)出者一致普通用戶調(diào)用system bus服務(wù)被拒system bus安全策略未放行查看/usr/share/dbus-1/system.d下對(duì)應(yīng)服務(wù)的conf文件確認(rèn)send_destination和send_interface規(guī)則桌面環(huán)境啟動(dòng)后dbus-daemon崩潰多個(gè)總線實(shí)例沖突或權(quán)限錯(cuò)誤systemctl --user status dbus.socket或dbus-daemon --session --print-address查看socket路徑檢查/run/user/uid/bus是否存在服務(wù)激活失敗進(jìn)程始終未啟動(dòng).service文件Exec路徑錯(cuò)誤或服務(wù)退出太快手動(dòng)執(zhí)行Exec里的命令看能否正常注冊(cè)到總線觀察journalctl日志調(diào)用方法無響應(yīng)進(jìn)程卡住服務(wù)端主循環(huán)阻塞或死鎖strace -p 服務(wù)進(jìn)程看是否阻塞在特定的fd上確認(rèn)服務(wù)端是否調(diào)用了阻塞式dbus_connection_read_writedbus-broker與dbus-daemon行為不一致策略實(shí)現(xiàn)差異導(dǎo)致偶發(fā)拒絕system bus使用dbus-broker的發(fā)行版在/usr/share/dbus-1/system.d里對(duì)某些語法支持有差異更換為dbus-daemon測(cè)試同一策略是否復(fù)現(xiàn)Qt程序在非X11環(huán)境收不到session bus未正確設(shè)置DBUS_SESSION_BUS_ADDRESS環(huán)境變量echo $DBUS_SESSION_BUS_ADDRESS窗口環(huán)境由會(huì)話管理器設(shè)置無桌面環(huán)境下手動(dòng)指定地址6.1 調(diào)試三板斧先看名字再看消息最后看進(jìn)程我的調(diào)試順序基本固定。第一板斧確認(rèn)服務(wù)名字是否存在于總線上這一步用一條dbus-send --print-reply就能判斷。如果名字不存在要么是服務(wù)沒起來要么是注冊(cè)失敗。第二板斧開dbus-monitor看消息有沒有到達(dá)目標(biāo)、目標(biāo)有沒有返回錯(cuò)誤。這是判斷調(diào)用是否到達(dá)服務(wù)端的最快方法。第三板斧如果消息到了服務(wù)端但沒反應(yīng)用strace -p pid看服務(wù)進(jìn)程到底卡在什么地方比如是不是在等鎖、等IO、或死循環(huán)。這三板斧能解決九成的D-Bus問題。前兩層定位“鏈路通不通”最后一層定位“服務(wù)端為什么沒處理好”。6.2 用GDBus調(diào)試命令做接口掃描除了dbus-sendgdbus命令也很有用。它有一個(gè)introspect子命令可以列出指定對(duì)象下的所有接口、方法、信號(hào)、屬性# 查看NetworkManager的根對(duì)象提供了什么接口 gdbus introspect --system --dest org.freedesktop.NetworkManager --object-path /org/freedesktop/NetworkManager返回結(jié)果是一段XML描述里面列出了每個(gè)接口的方法簽名和信號(hào)簽名。這個(gè)命令比dbus-send更友好因?yàn)楹灻苯涌梢娔悴挥萌ゲ聟?shù)類型。配合dbus-send做實(shí)際調(diào)用效率非常高。6.3 關(guān)于性能的幾點(diǎn)思考最后聊一下性能。D-Bus因?yàn)橐?jīng)過守護(hù)進(jìn)程轉(zhuǎn)發(fā)單次調(diào)用延遲通常比純unix socket直連高一個(gè)量級(jí)但絕對(duì)數(shù)值仍然很低——在本地socket上一次method_call的往返延遲大致是幾十微秒到幾百微秒級(jí)別。這個(gè)量級(jí)對(duì)桌面交互完全夠用但如果把它用在“每毫秒傳一次傳感器數(shù)據(jù)”的高頻場(chǎng)景就不合適了。批量數(shù)據(jù)傳輸也不要走D-Bus共享內(nèi)存或者臨時(shí)文件才更明智。D-Bus適合的是控制類消息而不是數(shù)據(jù)流。在嵌入式設(shè)備上我見過不少濫用D-Bus的例子有人把音頻PCM數(shù)據(jù)切成小塊用D-Bus signal來傳結(jié)果一卡一卡換成共享內(nèi)存后馬上就順了。在一個(gè)具體項(xiàng)目里我們做了個(gè)雙進(jìn)程方案通過D-Bus傳遞控制指令通過memfd內(nèi)存文件描述符共享大塊數(shù)據(jù)兼顧了解耦與性能。這種組合拳是我現(xiàn)在推薦的實(shí)踐。6.4 寫服務(wù)端時(shí)的血淚建議如果你要自己實(shí)現(xiàn)一個(gè)D-Bus服務(wù)有幾條經(jīng)驗(yàn)是書本上不會(huì)重點(diǎn)講的。第一注冊(cè)名字時(shí)要處理NameOwnerChanged信號(hào)——當(dāng)你的服務(wù)異常退出時(shí)總線會(huì)廣播這個(gè)信號(hào)依賴你的客戶端能據(jù)此做重連或降級(jí)處理不要指望客戶端自己檢測(cè)。第二方法實(shí)現(xiàn)里不要做長時(shí)間阻塞。D-Bus調(diào)用是同步等待語義服務(wù)端阻塞太久會(huì)讓客戶端顯得像卡死實(shí)際上客戶端進(jìn)程也沒死只是等不到回復(fù)。第三服務(wù)端進(jìn)程不要調(diào)用dbus_connection_close后接著退出要等disconnect流程處理完成否則總線上殘留的狀態(tài)可能讓客戶端誤判。實(shí)測(cè)中我維護(hù)的一個(gè)監(jiān)控服務(wù)偶爾會(huì)出現(xiàn)“客戶端報(bào)ServiceUnknown但服務(wù)進(jìn)程還活著”的現(xiàn)象后來定位到原因是服務(wù)注冊(cè)名字后沒有及時(shí)處理總線分配的唯一名與well-known name的關(guān)聯(lián)導(dǎo)致競(jìng)態(tài)。類似這種底層細(xì)節(jié)只能靠對(duì)信號(hào)機(jī)制多下功夫沒有捷徑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚欧精品久久久久久久久久久| 亚洲乱码精品一区二区| 无码人妻精品一区二区中文| 免费的av网| 深夜激情 | 一区二区三区高清天码| 四季AV综合网址| 欧美+日产+中文| 91狼人| 小草av不卡亚洲二区| 在线αⅴ| 亚洲欧美在线综合| 伊人久久综合影院| 亚洲国产中文字幕| 精品久久99| 亚洲中文sv| 无遮挡猛进视频免费无限观看| 国产免费一区| 久久免费精品视频免一| 蜜桃臀一区二区aV| 国产在线视视频有精品| 高清孕妇孕交 交孕妇| 日韩精品免费高清视频在线| 深爱伊人影院| 啊啊啊啊嗯嗯嗯用力好爽 | 久久久久大香青草精品综合| 视频黄色国产一级| 久久视频少妇美女| 九九无码视频| 极品欧美一区二区三区| 熟女少妇一区二区三区| 欧美夜夜狠| av网站免费看| 丁香婷婷激情五月天无毒不卡 | 日韩精品99久久久久久中文字幕| 人妻丰满熟妇一区二区三| 91麻豆天美国产| 69少妇一区二区| 色九九九综合| 亚洲图片欧美另类综合免费视频大大香| 一本一道波多野毛片中文在线| 国精综合一二三区影视| 久久久久九九九| 亚洲国产97在线精品一区| 五月天激情国产综合婷婷婷| 久久久久国产精品久久久| 97人肏| 在线毛片片免费观看| 96免费视频在线| 一区二区三区黄色片a| 日本亚欧爱爱| 很黄很污的免费网站| 精品国产丝袜一区二区三区乱码| 天躁夜夜躁2021| 色一射色一射| 91高清无码下载| 精品人妻一区二区免费看| 欧美日韩99精品麻豆传媒| 手机在线免费看的av| 97视频免费在线| 日日狠狠久久偷偷色综合免费| 欧美亚洲自拍另类人妻| 性欧美| 亚洲第一页欧美| 韩国三级理论在线| 久久精品国产亚洲AV高清演员表| 青青草大香蕉视频| 偷拍五区| 99999精品成人| 日本韩欧美在线播放a| 天天日天天操天天射河南省| 国产精品69久久久久孕妇欧美| 国产欧美伊人| 国产精品久久久久久 百度| 激情小说亚洲色图| 欧美激情 亚洲色图| 磁力99AV| 久久9精品视频| 精品一区二区亚洲国产| 翔田千里无码中出中文字幕| 日本精品一区二区不卡| 乱色老一区二区三区的观看方式 | 青青草色情网站视频| 第一高清av中文字幕| 日本韩国国产精品一区| 91九色丨风韵犹存| 欧美极品少妇| 欧美色日本| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 久久性爱视频| av一区二区三区 中文| αⅴ天堂| 欧美性爱第一页久久| 在线电影亚洲色图| 青青伊人加勒比海| 丝袜综合色图| 久久夜夜夜夜| 91人妻丝袜无码| 婷婷五月成人| 这里有精品| 家庭乱伦性爱av| 91亚洲色图| 精品在线78| 亚洲丰满很很操| 丰满精品人妻少妇久久字幕| 日韩精品操少妇| 一区二区三区国产精产| 熟妇熟女亚洲天堂网| 五月婷在线| 国产精品免费视频人成| 日韩精品人妻一| 久久久久人妻二区精品叶可怜| 亚欧美色| 99re免费| 超碰精品日韩欧美国产| 又粗又长又爽在线观看| 99国产在线 精品 视频| 新久久AV| 18禁网站在线播放| 福利伊人玖玖国产| 在线强奷到舒服的无码视频| 激情五月天社区| 手机看av网站在线看| 免费在线黄片视频| 欧美日韩激情无码专区| 国产97色在线| 天美AV片| 69久久久久久久久久久久久| 91爱看| 清清草影| 免费超碰97久久| 91无码人妻| 久久视频,这里只有精品 | 免费A片三p视频| 特色a在线上| 日韩大香蕉| 久久久亚洲熟妇熟女| 外站AV在线| 激情五月天中文字幕色| 日本性爰一道本| 乱伦av麻豆| 思思热免费视频观看| 国人欧美精品一区二区| 激情五月丁香五月| 91亚洲青青草原精品1区| 大香蕉97久久| 亚洲 欧美 小说| 91久久久老司机| 91天天爽| 欧美日本中字另类在线| 99婷婷| 九九热免费国产视频婷婷伊人五月 | 国产精品大香蕉| 亚洲精品一区中文字幕乱码| 国产天天骚| 97久久精品国产| 偷拍2020| 久久久久久久性爱| 26uuu性| 超碰九色| 日本少妇va7777| 亚洲精品白丝| 92久久| 五十路六十路七十路熟婆| 日本不卡高清视频| 久妇网| 丁香婷婷激情五月天无毒不卡 | 1024人妻熟女一区二区三区| 91大学精品激情戏| 久久一二三四不卡| 精精品人妻一区二区三区| 高清国产精品福利网站| 久久精品国产亚洲AV嘿嘿| 天天天天天干夜夜夜夜夜操| 国产精品网站www| 操老熟女AV| 精品黄色电影| 777奇米影视777四色| 婷婷四五区| 亚洲污污网站| 亚洲欧洲激情卡通另类文学四射小说网站 | 亚洲成人黄色在线观看| 无码国产精品午夜不卡(| 爱射综合| 蜜桃臀一区二区三区久久| 97超碰久久| 五月综合婷婷久久网站| 夜夜高潮夜夜爽高清视频一| 亚洲午夜蜜臀| 国产一区在线观看无码AV | 97久久精品亚洲| 久久一本大香蕉 | 黄片免费日韩| 亚洲丝袜二区| 亚洲资源吧| 日韩操逼HD| 天天色综合图片| 久久精品99久久久久久| 天天操天天干一区二区 | 人人澡人人爽人人精品| 精品人妻久久久| 精品久久久久久中文字幕三区| 婷婷五月天小说| 亚洲高清男人天堂| 国产综合网站在线播放 | 熟女字幕| 日韩精品大香蕉伊人在线| 97色综合中文网| 国产偷拍自拍在线视频| 四虎884a| 手机看片日韩人妻| 亚洲 欧美 小说| 亚欧精品久久久久久久久久久| 超碰1997| 中文字幕精品一区欧美| 丝袜天堂| 国产色综合亚洲色综合吹潮| 国产农村妇女精品1区二区| 亚欧美色| 亚洲天堂区| 综合亚洲网| 国产92麻豆天美精品色欲5| 少妇人妻精品| 成人三一级一片aaa| 高树玛利亚无码流出| 深夜国产福利| 丁香五月激情综合| 无码78| 五月天色综合| 超碰97丝袜| 日本天天色| 久区视频| 色五月综合网| 久一区久久蜜桃| 99久久婷婷| 亚洲天堂久久| 九九色婷婷| 就去色综合| 91 刺激在线| 玖玖久久久| 久久久久久亚洲精品不卡人乳| 偷偷人人精品女女久久| 99精彩视频| 综合少妇网| 97干在线| 3PAV乱伦视频| 天美传媒Av在线| 亚洲九月丁香| 岛国天天午夜影院传媒网| 久久东京国产精品视频| 在线视频资源| 岛国AV一区二区电影| 91亚洲欧美| 亚洲欧美九九九| 欧美黄色片在线播放| 91激情网| 天天肏夜夜肏| 色吧 综合| 99re8超碰| 天天操人人操狠狠插| 久久久久密臀视频| 成人丁香五月| av一区二区三区不卡| 欧美激情片一区二区| 制度丝袜99| 久久精品视| 久久激情视频| 丰满美女一级毛片在线播放| 试看60秒| 一区二区三区四区色图| 日欧操屄| 欧美色亚洲色| 97 超碰 人人做 人人爱| 久草免费福利在线播放| 丁香五月久久| 日韩啊V| 国产精品午夜福利视频| 婷婷精品| 日本狂喷奶水在线播放212| 蜜桃网熟妇| 欧美 中文字幕 一区| 思思热久久成人| 色婷婷日韩精品一区二区三区| 六月丁丁香| 26uuu国产亚洲综合| 91熟女.com| 超碰亚洲欧美日韩无| 国产对白刺激视频| 天天综合网~91| 一区二区 电影 亚洲| 强奸乱伦αv片| 中文字幕丰满子伦无码专区在线视频最新| 97se综合| 亚洲国产一级中文综合久久天堂在线免费观看 | 日韩人妻一区二区| 欧美情色亚洲| 欧美91精彩| 95精品在线| 欧美性巨大╳╳╳╳╳高跟鞋| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 青久久| 久久国产99精品72福利 | 蜜臀久久99'精品久久久| 人人天天欧洲| 91人妻Pr| 啪啪AV导航| 麻豆久久一区二区三区| 国产91专区| 香蕉久久精品| 97蜜桃综合| 丝袜大香蕉| 亚洲情色中文字幕一区| 岛国A V在线免费看| 精品国产AV一区天美传媒| 嗯嗯啊啊好大好爽| 夜夜嗨绯色| 有码免费观看| 欧美性天天影视| 天天干人妇| 天天色,天天干,天天干| 欧美不卡在线一区二区| 亚洲天堂男人天堂| 9999久久久| 久久99干一本高清| 色哟哟av| 久久久性少妇| 精品人妻一区二区蜜桃视频| 久操网无码在线| 国产91 丝袜在线播放00-百度| 色哟哟av| 中文字幕无码不卡啪啪| 欧美亚洲成人在线一区二区三区| 老师充足的奶水小说| 久久人妻四季| 色老汉色| 欧美欲色| 欧美一二三区四五区| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 伊人一区二区在线播放| 1000部熟女视频在线观看| 国产精品一区二区三区,亚洲综合| 97超级久久强资源| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 99国内熟女露脸视频| 久久中出在线| 欧美大香蕉97| 吊色| 美女91网址| 黑操B| 中文字幕日韩情色| 情侣开房子拍 日韩无码 女的很漂亮| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 久久啊啊啊| 91爱| 国产精品一二三区18| 狠狠干91| 精品人妻1区| 国产AV色黄看到爽| 黄片无码在线制服| 大香蕉乱伦视频网| av天堂影视中文在字幕在线中文| 熟女日韩| 成人五月天色网| 亚洲青青草| 国产精品久久久午夜夜伦鲁鲁| 久久久一二三四区| 欧美97在线欧| 亚洲va有码在线天堂| 92午夜免费福利视频| 久久精品99| 东京太热久久久| 精品国产乱码久久久兰草影视| 97超碰总站| 这里都是精品| 免费αV在线视频| 亚一综合久久久久久久久久| 91狠狠色丁香婷婷综合久久精品| 国产不卡精品91| 一区二区视频你懂的| 国产又大又粗又长视频| 久久久精品网| 多毛小伙内射老太婆| 91呆哥人妻| 一区,二区,三区网站| 骚女高跟AV在线| 欧美亚洲首页| 岛国激情视频软件| 91粉芽高清在线一区二区| 嫩草 人人网精品| 97在线免费公开视频| 久久久久久久强迫| 图片区小说区| 久久九九一区二区三区成人| 久久精品国产97欧美精品亚洲| 91亚洲欧洲| 免费超碰97在线观看| 人妻少妇精品一区二区三区| 日韩人妻精品中文字幕| 激情欧美97| 看大黄色大片原件| 色妺妺在线视频| 日韩人妻精品| 亚洲成人av电影在线| 一区二区日韩欧美久久| 春色综合免费| 另类小说综合网| 婷婷色综合| 久久久少妇诱惑精品视频| 欧美男人天堂| 中文字幕一区日韩精| 色诱avtt| 麻豆久久精品亚洲精品88| 欧美日韩国产中文精品字幕自在自线| 按摩中文字幕| 本道综合精品| 3p国产欧美99热| 97视频在| 青娱乐淫乱1314| 99热国产| 人妻色情天天操| 国产AV色黄看到爽| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 精品人妻二区三区| 亚州性色| 亚洲夜夜欢无码一区二区 | 男人的天堂啪啪啪啪啪蜜桃不卡| 伦理日韩国产久久| 人妻中文字幕精品无码| 亚洲s在线观看| 91第一页| 五月天激情小说网| 蜜臀中文无码午夜| 丁香色五月 97干| 五月开心久久AV官网| 日韩免费福利在线观看| 男人的天堂激情| 色逼综合| 男人的天堂在线有码| 美女十八禁| 欧美色综合影院| 国产亚热在线久久| 日va操| 色妇91| 强奸国产在线| 午夜精品人妻二区三区| 久草视频在线视频在线视频在线观看| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 黄日韩| 日韩极品无码B| 九九九综合精品| 热99这里有精品综合久久 | 少妇无码av专区线| 欧美熟女丝袜| 欧美精品自慰系列寂寞少妇| 黑白配性爱AV成| 日本色婷婷| 999国产精品999久久久久久| 亚洲1区| 96一区二区| 久久极品一区二区| dy888午夜老子影视达达兔| 97天堂| 亚洲一区二区麻豆影院| 日韩熟女精一区二区三区不卡| 99无码精品| 激情小说在线视频| 欧美内射少妇| 免费亚洲黄色视频在线观看| 女上位精品在线| 蜜桃无码AV一区二区| 麻豆一区二区AV天美| 婷婷丁香五月综合| 啊啊啊网站| 校园春色综合色| 亚洲欧洲综合成人av一区| 九九九影院| 丝袜美腿制服人妻二区中文字幕 | 亚洲精品性爱片| 久久精品视频一区三区小泽玛利亚| 久久黄色性爱视频| 澳门色噜噜色噜噜色噜噜色噜噜色噜噜| 色色色网站| 亚洲欧美日韩偷拍色图| 超碰97亚洲区| 亚洲欧美九九| 国产免费操逼| 天天色欧美| 日日夜夜国产综合| 妺妺跟我一起洗澡没忍住| 欧美天天干| 骚熟女吞| 天天爱天天韩国日本牛牛牛牛 | 亚洲人妻中文在线视频| 在线观看午夜婷婷久久久久清性观看| 国产欧美一区激情交| 97超碰色色| 97超视频在线观看| 任你艹| 免费看黄片现成| 97操综合| 亚洲色欲一区二区三区| av天堂5| 国产粉嫩蜜臀av一区二区三区| 欧美天堂超碰97| 婷婷五月天丁香花| 日韩色欲久久一二三四区| 亚洲骚逼少妇| 999九九精品| 亚州色交| 欧美一区二区亚洲天堂| 免费看黄片现成| 久久香蕉国产线看观看亚洲女人| 久久99999| 亚洲天堂综合AV| 在线看片国产精品每日更新| 3PAV乱伦视频| 视频二区美腿制服人妻欧美| 天天综合网入口~91| 激情五月天网站| 99re国产精品视频| 亚洲人成网站7777| 熟女91网站| 91欧美性| 午夜欧美神马久久久久| 久久人妻丝袜一区二区三| 91天堂色男人的天堂| 国产成人亚洲精品无码最新在线| 3P丝袜熟女 色综合| 97色涩| 97国产色综合| 色优久久| 国产精品一区二区黄片| 精品人体无圣光凹凸| 亚洲 暴爽 AV人人爽日日碰| 欧美色九九| 欧美综合传媒| 亚洲 综合 第一页| 欧美激情片一区二区| 91蜜臀在线久久久久| 日欧操屄视频| 欧美性爱视频免费一区一A| 久久亚州精品成人Av无| 国产午夜精品理论片a大结局| 丝袜美腿91| 国产吹潮女在线观看| 亚州色国| 国产人妻一区二区三区欧美毛片| 超碰97资源大奶| 蜜桃色色网站视频三区| Julia在线播放亚洲久久| 91黑人无码激情在线| 乱伦3P视频| 约操熟妇| 蜜臀操逼黄色视频操的好爽| 国产精品成人无码av无码免费| 欧美日韩大黄片| 51久久夜色精品国产麻豆| 欧美成年人性爱视频免费观看| 夜色综合| 亚洲色图欧美激情| 丰满人妻-区二区三区免费| 欧美 亚洲 偷拍自拍| 操逼片中文| 岛国视频一二三区| 97人妻免费中文字幕| 草草影院最新网址| 亚洲av综合色区无码一| 国产69精品久久久久99尤物| 韩国午夜理伦三级好看| aⅴ日韩成人电影av在线免费看av大全| 一类av片在线看| 欧美午夜视频精品久久| 爱做久久久久久| 久久亚洲婷婷| 狠狠欧美| 日韩激情视频| 久久人妻少妇| 色与欲影视天天看综合网| 97美日韩视频| 中文久久| 一区二区三区黄色片a| 亚欧无码在线| 国产99热| 精品国产99| 自拍亚洲综合| 欧美78P| 东京热一区二区中文字幕| 亚洲 中文字幕 精品| 少妇啪啪自拍| 婷婷色综合| 岛国小电影| 亚洲91网站| 亚洲人精品久久久| 久久专区| 日韩亚洲国产视频| 久久激情综合| 亚洲AV资源| 亚洲麻豆18发?| 熟妇女伦乱视频| 日婷婷| 日韩黄色一区二区三区| 国产黄a三级三级三级av在线看| 中文字日本乱码| 欧美亚洲高清晰| 97久久网| 亚洲精品第一| 四虎AV无码| 超碰伊人在线| 丝袜美腿亚洲| 国产精品探花在线| 亚洲国产剧情少妇激情| 黄站在线免费观看| 99久久亚洲精品无码毛片潘甜甜| 国产美女mm131爽爽爽爽| 在线黄页看毛片| 裸体1区| 性91| 日韩亚洲Av人人夜夜澡人人爽| 午夜天堂精品久久久久91| WWW.加勒比人妻一区不卡.com| 日韩综合第八区国产精品| 亚洲av无码国产精品字幕| 九九色逼| 精国久久一区二区三区98| 久草加勒比一区在线| 尤物国产一区在线观看| 午夜欧美神马久久久久| 懂色Av一区二区三区| 强歼乱伦资源网| 久久综合久久综合人久久夜精品| 蜜臀va69| 精品亚洲国产成人精品| 麻豆区99999| 强乱老妇中文字幕| 欧美日韩香蕉| 国产AV人人 夜夜人人澡| v91av| 亚洲第一成人影院色播| 蜜臀久久久| 热99这里有精品综合久久| 国产亚洲综合欧美一区| 91高潮喷水美女| 一个色导综合| 干B视频伊人网| 男人的天堂1024| 天堂av最新电影网| 欧美一级黄片视频在线| 国产福利夜| 91亚洲欧洲| 综合色播| 欧美三级偷拍| 欧美日韩国内不卡| 后入福利视频| 强奸乱伦Av网| 99蜜桃臀久久久欧美精品网站| 69XX一中文字幕人妻91| 情色日播放AV| 我要色综合网| 亚洲黑丝在线| 精精品人妻一区二区三区| 午夜免费福利视频一区| 国产精品电| 看日韩操逼| 久久一区二区加油站| 免费观看国产小粉嫩喷水精品午| 人妻在线臀日韩| 91久久久亚洲| 嗯嗯,啊啊,国产精品| 国产精品96| 麻豆天美久久91| 亚洲97| 在线观看十八禁| 亚洲欧美第一页| 国产伦精品免编号公布| 人人操人人色网| 国产性感骚丝袜在线| 国产精品久久久 | 精品国产一区二区三区久久久蜜臀 | 国产强奸乱伦无码视频| 91在线美女| 国产无码久久高清| 97天天做| 亚洲成人日韩小说| 人妻少妇久久| 99操视频| 亚洲丝袜综合| 中文字幕55555| 91久久免费视频互動交流 | 蜜桃丰满熟妇av无码区不卡| 网页导航五月天免费一二三区 | 妇女性内射冈站HDWWWCOM| 97视频7| 乱伦Av网| 九九九九亚洲| 欧美最婬乱婬爆婬性视频| 成人av在线播放| 欧美亚洲综合999| 丁香五月自拍| 亚洲无线观看久久| 品亲网欧美品亲网| 91free福利| 久热精品在线| 男人下部插入女人下部 | 国产亚洲99久久精品| 97精品久久| 99热导航| 一级A啪啪啪啪| 亚洲色宗合| 熟女一区二区三区| 亚洲精品成人激情在线| 欧美日本成人一区二区| 日韩精品电影| 日本欧美成人片AAAA| 乱伦熟女论坛| 中文字幕一品色图| 天天看天天综合成人网| 涩涩这里只有精品视频| 啊啊啊啊嗯嗯在线久久久| 人妻一区二区三区| 欧美日韩性爱无码| 欧洲久久一二线| 超碰1997| 69精品少妇一区二区三区蜜桃| 一区操逼| 99热婷婷一区二区三| 亚州乱码中文字幕综合久久久| 最新中文字幕精品在线| 精品久| 久久精品99久久久久久| 999久久久精品国产| 久久riav中文精品| 伊人操| 欧美日韩97在线| 国产夜夜艹| 色五月激情网| 一区二区三区黄片免费观看| 欧美日韩在线小说 | 热的中文 热的有码 热的国产| www.99热| 中文字幕123| 日韩成年人性爱视频| 久久久久久九九九九九九| 久久久噜噜噜久久久| 自拍偷拍2025在线观看| 日韩字幕一区| 男人天堂新在线| 人人摸人人舔一区二区| 夜夜狼人妻| 伊人网av| 高清无码国产亚洲| 激情网色| 人妻9117c| 久草资源在线| 日本国产二线女色| 丁香婷婷激情五月天无毒不卡| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 北京专精特新企业招聘信息| 91操人视频| 亚洲最新av无码成人精品区| 日韩在线地址一| 97在线看| 久久久久久久91| 婷婷性网| 91天堂丝袜美腿| 一区二区亚州激情久婷婷欧美| 中国黑人三级片网站上区| 久久久久久久九九九九九九| 九九色色| 久久九九99| 五月丁香六月婷综合成人综合| 欧美成人性爱视频免费观看| 日韩人妻制服丝袜av| 黄片免费视频2019| 国产午夜福利专区综合| 九九综合九九综合| 99999精品| 欧美日韩资源| 91天天综合网| 中文字幕熟女人妻丝袜| 激情小说亚洲色图| 国产精品白丝| 欧美v日韩v亚洲v最新在线| 熟女人妻精品一区二区视频| 9Ⅰ超碰| 色臀AV| 中文视频在线观看| 欧美裸体美女日麻屄| 97在线免费视频| 美女被啪到深处抽搐视频| 白丝AV| 国产成人超碰在线| 欧美一区二区一级岛国大片| 国产在线观看91精品一区| 国产高清吃奶免费视频网站| 熟女这里只有精品6| 色色色色日本| 亚洲一区二区三区欧美日韩| 国模精品一区二区三区苹果色戒| 毛片电影一区二区三区| 五月激情综合网| 欧美午夜精品久久久久久超碰| 久操黄色视频| 99热在线不卡| 日韩久草| 九九精品网| 国产精品操| 少妇熟女1区2区3区| 午夜激情成人在线观看| 亚洲精品啪视频| 亚洲成av人片色午夜乱码| 色激情五月天| www.一本大99| 亚洲熟久久| 性欧美| 爱爱啊啊啊| 老司机天天操| 亚洲日韩国产欧美综合v| 久热这里| 另类av天堂| 久久久精| 中文字幕丰满子伦无码专区在线视频最新| 91精品无码久久久久久久| 国产精品亚洲一级av第二区| 国产视频一区二区免费| 男人的天堂在线有码| 国产精品网站免费 | 日本欧美不卡| 欧美呦呦性爱| 国产精品亚洲美女久久久久| 麻豆2区1区天美| 美国久久一二三四| 大香蕉手机在线| 东京热毛片177b2viP| 免费精品无码一级毛片牛牛影视| 亚洲国产精品有声| 91黑丝露脚| 亚洲国产日韩欧美熟妇在线| 综合色图区| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 天美传媒AV在线播放| 色欲av一区二区三区蜜芽| heyZO天然素人无码AⅤ专区| 性开放中文AV高清无码免费看| 日本狠狠干| 久久仑合| 国产丝袜啪啪| 奇米四色网| 亚洲高清在线| 欧美日动态视频| 操久久久久| www.伪伪| 狠狠干狠狠干| 日日干夜夜欢| 久久久久久久久9| Sekablack无码一区| 综合五月婷婷| 97超碰色屌| 变态综合色| 国产亚洲精品久久久久小| 激情网五月天| 久久人妻少妇| 国产熟女精品一区二区| 黄色性爱网网| 狠肏骚人妻| 淫淫综合网| 亞洲久久直播| 欧美最婬乱婬爆婬性视频| 久操免费视频| 亚洲欧洲综合av在线| 天天欧美色| 国产人妻久久精品一区二区三区| 大香蕉黄色一级片免费看| 久久久久久AⅤ无码免费肉站| 亚洲AV乱码专区国产噜噜亚洲 | 欧美亚洲高清晰| 免费观看网黄| 97中文超碰| 国内精品久9| 熟女精品va中文字幕| 激情五月天丁香社区| 另类av综合久久| 国产偷拍网站| 国产少妇肉丝在线观看| 久久久免费视频18| 久久久久久九九九| 91久久久久久| 日本久久久精品电影| 99这里只有精品国产| 亚洲 中文 女同| 天天天堂影视日韩亚洲91| 黄色激情电影在线观看| 欧美色图中文字幕| 久9九综合在线| 九九色色| 国外91| 国产女人高潮嗷嗷嗷叫小说| 久久亚洲天天做| 欧美97爱| 97AV爱| 日韩成年人性爱视频| 婷婷六月色| 蜜臀99久久国产| 丁香激情网| 综合亚洲网| 成人看片网站| 丝袜视频网国产90| 日韩中文字幕二区| 中文字幕福利视频一区二区三区在线观看| 岛国黄| 人妻激情在线视频| 91爆操视频| 人妻五十路在线| 青娱乐久久艹| wuyechaopeng| 精品亚洲国产成人AV制服丝袜| 天美传媒精品一区二区三区| 亚洲国产成人精品无码专区| 美女丝袜激情小说| 人妻精品视频一区二区| 91久久国产精品| 日韩黄色成人性爱| 九九九国产| 女同亚洲欧美一二三区久久电影| 亚洲欧美日韩不卡人妻| 老女人爆菊| 久久国产AⅤ| 91精品人妻一区二区三区蜜桃臀| 免费看黄片现成| 91av天美性媒精品视频| 国产99精品一区二区三区免费| 亚洲视频二区| 日韩,欧美,中文在线| 青青草原av| 日韩av影片在线观看| 欧美激情 一区| 亚洲色人妻综合| 囯产精品久久久久久久久久梁医生 | 国产妇女精品视频青青草| 精品国产一区二区三区四区在线看| 国产乱码精品久久久久久| 狠狠色噜噜狠狠狠狠狠色综合久久| 狠狠做深爱婷婷久久二区| 国产精品久久久三级无码| www亚洲欧美| 有码免费观看| 日本操逼二区| 四虎884| 欧美 亚洲 制服 精品| 十八禁视频一区二区| 色偷综合| 色婷视频| 人人操人人爽人人操人人| 91男人天堂网| 九九久久精品| 老熟女乱伦一区| 玖玖综合视频| 野狼激情网| 精品少妇人妻av久久免费| 97亚洲自在精品在线观看| 欧美色图电影| 国产十八禁视频| 激情综合色| 少妇熟女1区2区3区| 欧美激情亚洲情色| 91色久| 亚洲色婷婷久久91| 青青草啪啪网| 留下AⅤ黄色片| 性色AV蜜色av色欲av| 玖玖爱综合网| 日韩一级二级| 日本色色色视频| 亚洲九九九| 成人在线午夜视频一区| 99亚亚热| 人人艹亚洲| 91精品久久久久| julia中文字幕在线观看| 色五月网址| 欧美性生活免费网| 久久久久夜夜夜夜| 中文字幕人乱码中文字的预防方法 | 91九色精品熟女内射| 无码精品久久| 大鸡巴久久| 国产又大又粗又长视频在线| 5月婷婷6月六月丁香| 插入逼91| 黄色十八禁| 97干com| 免费精品福利在线观看| 香蕉热人人精品| 色综合加勒比| 后入福利| 综合视频91| 情色av电影| 3571色综合一区二区二区| 国产精品呦一区二区三区| 亚洲欧洲成人在线电影| 久热这里只有精品9| 亚州综合图片| 六月丁操逼| 五月久久HDAV| 日本黄 R色 成 人网站| 亚欧无码在线| www亚洲免费| 欧美色性情| 蜜区区视频79 | 97超碰欧美精品| 熟女露脸激情自拍视频| 91最新综合| 九九在线视频| 久久久久国产无av| 伊人网免费视频| 中文字幕后石码三区四区| 亚洲高清欧美总合| 亚州色图狠狠干| 国产精品久久久久久夜夜夜| 日韩三级久久久| 色综合色色| 视频分类 国内精品| 精品亚洲国产成人av网站| 久久久久人妻二区精品叶可怜| 乱伦强奸区日韩| 精品日韩| 欧美色图第一页| 国产久9| 97精品人妻一二三四| 欧美洲精品一级| 日本九九久久99| 亚洲凸凹超碰成人| 天天干人妻| 亚洲欧洲色情高清| 蜜臀久久99精品| 夜夜嗨绯色| 最新精品久久蜜桃| 搞中出视频在线观看| 91九九九小逼| 蜜桃视频精品一区二区三区| 亚洲男人的天堂一区二区| 青苹果影院男人的天堂| 久久秀这里有精品| 强上我不卡卡| 精品国产一区二区三区久久久蜜臀 | 亚洲人妻在线精品| 国产精品剧情| 黄片www视频免费| 午夜男女爽爽大片免费观看| 91天天| 日韩在线地址一| 国产精品黄色三级av| 中日韩免费看男女操逼大全| 日本中文字幕不卡视频| 国产精品原创巨作?v网站| 激情小说图片亚洲首页| 五月天婷婷在线看| 日韩黄片视频试看| 久久激情亚洲精品无码?V| 国产www色在线观看| 欧美顶级黄片AAAAA在线免费看| 亚洲欧美国产日本一区二区三区| 中文字幕性感少妇av| 超碰人人妻| 日日干日日操五月天伦理视频| 91色黑人少妇| 91激情综合| 久久久久久人体| 亚洲天在线| 97色碰| 免费精品中文字幕| 成人性爱电影网| 五月天婷婷激情| 欧美色图天堂网m| 四虎在线免费视频| 国产97在线播放| 亚洲天堂男人天堂| 久久黄色视频一区二区三区| 日韩一区二区高清在线观看的| 丁香五月天堂| 少妇被玩视频二三区| 操美女人妻| 天美传媒av 在线| 男人天堂欧美| 欧美综合 站| 亚洲av影音先锋| 亚洲AV成人无码一区二区三区在线观看 | 国产精品欧美激在线| 亚洲91射| 春色91| 人人操我人人干| 亚洲精品三| 亚洲第一页欧美| 密臀成人视频久久久| 3PAV乱伦视频| 日逼视频日本| 日韩三级视频一区二区三区| 干b在线性社区| 四虎精品永久在线观看| av毛片aaaaa免费看| 中文字幕第95页| juliaann欧美丝袜办公室| 先锋激情∨在线视频播放| 午夜丁香| 女人的天堂大香蕉网| 欧美偷拍| 亚洲图片婷婷五月天| 欧美精品999| 日本东京热大香蕉a片| 蜜臀AV一区二区三区| 欧美日韩日产免费网站看| 成人情色一区二区| 狠狠躁AV| 日韩无码服务区| 人人做天天爱| 亚洲丝袜色| 蜜臀在线看片| 日韩精品在线视频在线观看| 一级黄色牲爱A级片| 后入内射蜜桃臀| 99热婷婷一区二区三| 狼狼色丁香久久婷婷综合五月| 六九九九| 白嫩91在线亚洲| 成全动漫视频观看免费下载| 欧美色婷婷| 91碰碰| 亚洲激情综合另类男同| 久久这里都是精品| 9精品久久久久| 久久的免费性爱视频| 久久ww| 日韩中文字幕精品一二三事国产精品| 边做饭边操逼逼| 校园春色制服丝袜中文字亚洲 | 亚洲精品国产精品成人| 亚洲午夜AV| 999熟女精品| 天天激情干| 亚洲 图片 欧美 色图| 蜜臀在线看片| 久久综合亚洲色1080p| 情色五月天久久久| 成年无码动漫av片无尽在线 | 日韩有码专区| 欧美成va视频网站| 2017天天透天天通天天擦| 国产又猛又粗又爽又黄| 青青青操| 久久9精品| 性一交一乱一交A片久久四色| 任我爽在线视频免费观看| xxxx网站亚洲精品| 日韩精品99久久久久久中文字幕 | 91精品人| 校园春色制服丝袜中文字亚洲| 亚洲图片 欧美电影| 女人被添高潮免费视频| 亚洲性少妇| 视频国产精品未满十八禁止在线观看| 中文字幕人妻色偷偷久久皮|