बाहरी प्रदर्शन प्लग इन होने पर स्वचालित रूप से RandR कॉन्फ़िगरेशन लागू करने का एक उपकरण


53

एक उपकरण है जो एक को सक्षम करता है:

  • मॉनिटर के आधार पर वर्तमान रैंडर कॉन्फ़िगरेशन (स्थिति, अभिविन्यास, संकल्प आदि) को याद रखें।
  • स्वचालित रूप से अंतिम ज्ञात अच्छे कॉन्फ़िगरेशन को लागू करें जैसे ही डिस्प्ले प्लग किया जाता है, एप्लेट्स या ज़ेंडर (1) के साथ घूमने की कोई आवश्यकता नहीं है?

कॉन्फ़िगरेशन को प्रति-उपयोगकर्ता, प्रति-प्रदर्शन के आधार पर लागू करना होगा।

यदि जंगली में ऐसा कोई उपकरण नहीं है, तो मैं एक साथ खुद को फेंकना चाहता हूं, लेकिन जहां तक ​​मैं देख सकता हूं, यह बताने का कोई तरीका नहीं है कि मॉनिटर को प्लग किया गया है। क्या मुझे xrandr -q के साथ चुनाव करना है। एक बार एक समय में यह पता लगाने के लिए कि एक आउटपुट जुड़ा हुआ था या डिस्कनेक्ट हो गया था, या क्या इसे करने के लिए अधिक कुशल तरीका है? क्या udv को ऐसा करने के लिए तैयार किया जा सकता है?


क्या आप सुनिश्चित हैं कि यह बताने का कोई तरीका नहीं है कि आपके कार्ड के साथ एक मॉनिटर प्लग किया गया है। udevadm monitor --propertyटर्मिनल से चलाने की कोशिश करें और मॉनिटर को प्लग इन करें। अपने कार्ड के साथ, मुझे प्लग इन होने पर एक ईवेंट दिखाई देता है। आप udv में + RUN रूल का उपयोग करने में सक्षम हो सकते हैं और कुछ बैश स्क्रिप्टिंग प्राप्त कर सकते हैं जो आप चाहते हैं। हालांकि, मुझे यकीन नहीं है कि आप udv का उपयोग करके प्रति उपयोगकर्ता के आधार पर इसे कैसे लागू कर पाएंगे।
स्टीवन डी

@ उत्तर: आपकी टिप्पणी का उत्तर होना चाहिए। यह पूर्ण उत्तर नहीं है, लेकिन यह महत्वपूर्ण प्रगति करता है। अगर udv एक हार्डवेयर ईवेंट देखता है, तो उसे हॉल्ट को सूचित करना चाहिए जो एक डबस इवेंट भेजता है जिसे उपयोगकर्ता कोड द्वारा देखा जा सकता है।
गिल्स एसओ- बुराई को रोकें '

जवाबों:


19

मैं इस सरल (होममेड) स्क्रिप्ट का उपयोग कर रहा हूं, जो वीजीए से कनेक्ट / कट होने पर RandR और स्विच को LVDS1 और VGA1 के बीच रखता है। (के लिए HDMI आउटपुट, निम्न स्क्रिप्ट फ़ाइल में, बदलने के सब VGA1करने के लिए HDMI1)

यह एक गंदा समाधान है, फिर भी यह ठीक काम कर रहा है।

यह मेरे सेटअप के लिए अनुकूलित है: आपको सबसे अधिक संभावना है कि आप RandR आउटपुट नामों ( LVDS1और VGA1) को बदल सकते हैं और मेरे विपरीत आप शायद वीजीए के लिए अपने RandR डिफ़ॉल्ट मोड के साथ ठीक होंगे।

#!/bin/bash

# setting up new mode for my VGA
xrandr --newmode "1920x1080" 148.5 1920 2008 2052 2200 1080 1089 1095 1125 +hsync +vsync
xrandr --addmode VGA1 1920x1080

# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to VGA and vice versa
function ActivateVGA {
    echo "Switching to VGA1"
    xrandr --output VGA1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    MONITOR=VGA1
}
function DeactivateVGA {
    echo "Switching to LVDS1"
    xrandr --output VGA1 --off --output LVDS1 --auto
    MONITOR=LVDS1
}

# functions to check if VGA is connected and in use
function VGAActive {
    [ $MONITOR = "VGA1" ]
}
function VGAConnected {
    ! xrandr | grep "^VGA1" | grep disconnected
}

# actual script
while true
do
    if ! VGAActive && VGAConnected
    then
        ActivateVGA
    fi

    if VGAActive && ! VGAConnected
    then
        DeactivateVGA
    fi

    sleep 1s
done

पूर्ण चरण:

  1. प्रेस करके टर्मिनल खोलें Ctrl+Alt+t
  2. ऑटो-स्विचिंग शेल स्क्रिप्ट बनाने और संग्रहीत करने के लिए एक अच्छे स्थान पर नेविगेट करें। उदाहरण

    cd ./Desktop/

  3. अपने इच्छित टेक्स्ट एडिटर (। इसे अपनी सुविधा के लिए नाम दें। उदाहरण

    sudo pluma homemadeMonitor.sh

  4. फ़ाइल संपादित करें और उपर्युक्त स्क्रिप्ट से सब कुछ पेस्ट करें (#! / Bin / bash के साथ)

  5. टर्मिनल में निम्न कमांड टाइप करके .sh फ़ाइल को निष्पादन योग्य बनाएं

    sudo chmod +x homemadeMonitor.sh

  6. .Sh फ़ाइल चलाएँ

    ./homemadeMonitor.sh


अच्छी स्क्रिप्ट! धन्यवाद, मुझे ऐसा कुछ चाहिए था। मैंने इसे कॉपी किया और इसे अपने आप चलाने के लिए सेट किया। धन्यवाद!
लिनक्स

21

जवाब देने के लिए "[ए] तरीका है कि यह बताने के लिए कि मॉनिटर को प्रश्न के भाग में प्लग किया गया है:

समर्थन अभी भी काफी भिन्न होता है, लेकिन हाल के गुठली के साथ udv घटनाओं को उत्पन्न करने के लिए कुछ समर्थन होता है जब एक प्रदर्शन हॉटप्लग होता है। कर्नेल 2.6.38 और अति X1400 हार्डवेयर के साथ, मुझे पहली बार एक घटना मिलती है जो मैं वीजीए डिस्प्ले कनेक्ट करता हूं लेकिन बाद के डिस्कनेक्ट या डिस्प्ले के पुन: संयोजन पर कोई घटना नहीं होती है। इंटेल हार्डवेयर का बेहतर समर्थन हो सकता है। NVIDIA मालिकाना चालक वर्तमान में KMS का समर्थन नहीं करता है; मैंने NVIDIA हार्डवेयर पर हॉटप्लग घटनाओं की तलाश करने की कोशिश नहीं की है, लेकिन मुझे संदेह है कि यह काम करेगा।

यदि आप udev के साथ प्रयोग करना चाहते हैं तो आप निम्नलिखित चरणों को आजमा सकते हैं:

  • नवीनतम कर्नेल के लिए अद्यतन
  • सुनिश्चित करें कि कर्नेल मोड सेटिंग (KMS) सक्षम है। यदि सक्षम है, तो इसे आपके कर्नेल आउटपुट में रिपोर्ट किया जाना चाहिए। मेरा कहता है [drm] radeon kernel modesetting enabledऔर[drm] initializing kernel modesetting
  • चलाएं udevadm monitor --propertyऔर देखें कि क्या घटनाओं की रिपोर्ट तब की जाती है जब आप (डिस) कनेक्ट प्रदर्शित करते हैं

यदि आपको प्रदर्शन हॉटप्लग पर udev ईवेंट मिल रहे हैं, तो आप एक udev नियम जैसी स्क्रिप्ट को ट्रिगर कर सकते हैं:

ACTION=="change", SUBSYSTEM=="drm", HOTPLUG=="1", RUN+="/path/to/hotplug.sh"

नोट: यदि आप KMS का उपयोग नहीं करते हैं तो यह मालिकाना बाइनरी ड्राइवर के साथ nVelia GPU का उपयोग करने पर काम नहीं करेगा । आपको कोई udev इवेंट नहीं मिलेगा।


19

एक उपकरण के बारे में जो प्रति-उपयोगकर्ता और प्रति-प्रदर्शन के आधार पर मॉनिटर कॉन्फ़िगरेशन प्रोफाइल को स्टोर कर सकता है, ऑटोरैन्डर ठीक यही करेगा। https://github.com/wertarbyte/autorandr

मेरे लैपटॉप में एक NVIDIA कार्ड है, इसलिए मैं xrandr के बजाय डिस्पर बैकेंड का उपयोग करता हूं: http://willem.engen.nl/projects/disper/ । यदि आप इसे कहते हैं, तो ऑटोरेंडर आपके मॉनिटर को प्रबंधित करने के लिए बैकएंड के रूप में डिस्पर का उपयोग करेगा autodisper। हालांकि इस पोस्ट के बाकी हिस्सों के लिए, मैं इसे autorandrस्थिरता के लिए संदर्भित करूंगा ।

आप के साथ प्रोफाइल बचा सकते हैं autorandr --save profile_nameautorandrअपने आप चल रहा है तो आपको प्रोफाइल की एक सूची देगा, और यह पहचान करेगा कि वर्तमान कॉन्फ़िगरेशन के रूप में किसका पता लगाया गया है।

उदाहरण के लिए:

$ autorandr
laptop
syncmaster19 (detected)

आप इसे वर्तमान कॉन्फ़िगरेशन के लिए उपयुक्त प्रोफ़ाइल को स्वचालित रूप से लोड करने के लिए कह सकते हैं autorandr --change। यह आदेश, एक udev नियम के साथ जोड़ा जाता है, जब इसे हॉटप्लग किया जाता है, जो आप अनुरोध करते हैं, उसे करेंगे।

जोड़े गए एहतियात के तौर पर मैंने --default laptopउस कमांड को जोड़ दिया है, जो अगर वर्तमान कॉन्फ़िगरेशन से मेल खाता कोई सहेजा गया प्रोफ़ाइल नहीं है, तो यह लैपटॉप के डिस्प्ले के लिए डिफ़ॉल्ट हो जाएगा। तो पूर्ण कमांड जो मैं डिस्प्ले स्विच करने के लिए उपयोग करता हूं वह है:

autorandr --change --default laptop

जब मैं अपने मॉनीटर को हॉटप्लग करता हूं तो दुर्भाग्य से मेरी मशीन कोई udv आउटपुट नहीं देती है। मैं NVIDIA मालिकाना ड्राइवरों का उपयोग कर रहा हूं, इसलिए यह आश्चर्यजनक नहीं है। इसलिए मैंने इसे अभी के लिए XF68Display कुंजी (Fn-F8) के लिए बाध्य किया है, जो लगभग उतना ही अच्छा है।


1
ऑटोरैंडर समय की बर्बादी थी, खराब दस्तावेज, यादृच्छिक मॉनिटर ब्लिंक्स, कोई इंस्टॉलेशन / स्थापना रद्द करने के निर्देश नहीं। इसका उपयोग करके इसे हल कर सकते हैंudev
सिंह गैलुकि

5
बस के मामले में, वहाँ एक अच्छा बनाए रखा है फिर से लिखा पायथन कांटा autorandr: github.com/phillipberndt/autorandr
Olegs Jeremejevs

7

मैंने एक शेल स्क्रिप्ट के साथ ऊपर सुझाए गए udv नियम का उपयोग किया है जो दिखता है

#!/bin/sh

dmode="$(cat /sys/class/drm/card0-VGA-1/status)"
export DISPLAY=:0
export XAUTHORITY=/home/yourusername/.Xauthority

if [ "${dmode}" = disconnected ]; then
     /usr/bin/xrandr --auto
elif [ "${dmode}" = connected ];then
     /usr/bin/xrandr --output VGA1 --auto --right-of LVDS1
else /usr/bin/xrandr --auto
fi

एक्सपोर्ट के साथ-साथ ज़ाओथॉरिटी हिस्सा आवश्यक है DISPLAY, आप इको $DISPLAYका उपयोग करके देख सकते हैं कि यह किस संख्या के बराबर है। xrandr -qआपके पास मौजूद बाहरी मॉनिटर को देखने के लिए उपयोग करें । अंतिम कथन केवल यह सुनिश्चित करने के लिए है कि आप बिना प्रदर्शन के कभी नहीं अटके।


6

एक छोटा प्रोग्राम जो एक्स सर्वर का इंतजार करता है, उसे बदले हुए मॉनिटर कॉन्फ़िगरेशन के बारे में सूचित करता है, और फिर दिए गए कमांड को निष्पादित करता है (उदाहरण के लिए autorandrएक अन्य उत्तर में) उपलब्ध है: https://bitbucket.org/portix/srandrd/overview

यह एक क्लीनर समाधान लगता है जिसका उपयोग करना udev(जहां आपको सही एक्स सर्वर आदि खोजने के बारे में चिंता करना है)


5

यदि आपके पास इसे प्लग इन होने पर डिस्प्ले का स्वचालित रूप से पता लगाना चाहिए, तो ऐसा लगता है कि सबसे साफ समाधान आपके xrandr कमांड वाले स्क्रिप्ट को चलाने के लिए UDEV नियम जोड़ना है। यहां एक उपयोगकर्ता के समाधान 1 से एक उदाहरण दिया गया है :

मॉनिटर (आउटपुट) UDEV ईवेंटudevadm
इस चरण के साथ प्रत्येक उपयोगकर्ता के लिए सबसे महत्वपूर्ण होगा। भागो udevadm monitor --environment --udev। फिर अपने एचडीएमआई केबल को कनेक्ट करें।

UDEV नियम
उपरोक्त आदेश से आउटपुट के आधार पर, उपयोगकर्ता ने इस UDEV नियम को बनाया /etc/udev/rules.d/95-monitor-hotplug.rules

KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/dan/.Xauthority", RUN+="/usr/local/bin/hotplug_monitor.sh"

नोट करें कि उपयोग किए गए पर्यावरण चर xrandr उपयोगकर्ता प्रोफ़ाइल के तहत चलाए जाएंगे।

xrandr स्क्रिप्ट hotplug_monitor.sh

आप अपनी आवश्यकताओं के अनुरूप xrandr विकल्पों को समायोजित करना चाह सकते हैं।

#! /usr/bin/bash

export DISPLAY=:0
export XAUTHORITY=/home/dan/.Xauthority

function connect(){
    xrandr --output HDMI1 --right-of LVDS1 --preferred --primary --output LVDS1 --preferred 
}

function disconnect(){
      xrandr --output HDMI1 --off
}

xrandr | grep "HDMI1 connected" &> /dev/null && connect || disconnect

3

जो लोग, जो भी कारण के लिए, हॉटप्लग मार्ग नहीं लेना चाहते हैं, यह अभी भी एक स्क्रिप्ट के भीतर चुनाव नहीं करना संभव है inotifywait का उपयोग कर:

#! / Bin / bash

SCREEN_LEFT = DP2
SCREEN_RIGHT = eDP1
START_DELAY = 5

renice +19 $$> / देव / अशक्त

$ $ START_DELAY सोएं

OLD_DUAL = "डमी"

जबकि [1]; करना
    DUAL = $ (बिल्ली / एसआईएस / वर्ग / ड्रम / कार्ड0-डीपी -2 / स्थिति)

    अगर ["$ OLD_DUAL"! = "$ DUAL"]; फिर
        अगर ["$ DUAL" == "कनेक्टेड"]; फिर
            गूंज 'दोहरी निगरानी सेटअप'
            xrandr --output $ SCREEN_LEFT --auto - सामान्य को समेटें - 0x0 --output $ SCREEN_RIGHT --auto - को सामान्य करें - $ को खोलें
        अन्य
            इको 'सिंगल मॉनिटर सेटअप'
            xrandr - औटो
        फाई

        OLD_DUAL = "$ दोहरी"
    फाई

    inotifywait -q -e close / sys / class / drm / card0-DP-2 / status> / / / सुस्त
किया हुआ

Xrandr के साथ मतदान ने मेरे ब्रांड के नए लैपटॉप (माउस को समय-समय पर स्टाल किया जाएगा) पर गंभीर प्रयोज्य मुद्दे दिए।


1

Peoro के समाधान का उपयोग करते समय, मुझे xrandr से कुछ अतिरिक्त आउटपुट मिला, इसलिए मैंने grep के लिए -c विकल्प का उपयोग किया जो मैचों की संख्या को गिनता है। मैंने इसे HDMI के लिए अनुकूलित किया और ऑडियो स्विच भी जोड़ा:

#!/bin/bash
# adapted from http://unix.stackexchange.com/questions/4489/

# default monitor is LVDS1
MONITOR=LVDS1

# functions to switch from LVDS1 to HDMI1
function ActivateHDMI {
    xrandr --output HDMI1 --mode 1920x1080 --dpi 160 --output LVDS1 --off
    pactl set-card-profile 0 output:hdmi-stereo-extra1
    MONITOR=HDMI1
}
function DeactivateHDMI {
    xrandr --output HDMI1 --off --output LVDS1 --auto
    pactl set-card-profile 0 output:analog-stereo
    MONITOR=LVDS1
}

# functions to check if HDMI is connected and in use
function HDMIActive {
    [ $MONITOR = "HDMI1" ]
}
function HDMIConnected {
    [[ `xrandr | grep "^HDMI1" | grep -c disconnected` -eq 0 ]]
}

# actual script
while true
do
    if ! HDMIActive && HDMIConnected
    then
        ActivateHDMI
    fi

    if HDMIActive && ! HDMIConnected
    then
        DeactivateHDMI
    fi

    sleep 1s
done

1

मुझे लगता है कि इस प्रश्न को देखने वाले लोग वे नहीं हैं जो GNOME का उपयोग करना चाहते हैं, और जो लोग GNOME का उपयोग करते हैं, उन्हें इस प्रश्न को नहीं देखना होगा, लेकिन पूर्णता के हित में:

GNOME की यह कार्यक्षमता अंतर्निहित है। यदि आप gnome-control-center के माध्यम से सेटअप बदलते हैं, तो gnome-settings-daemon इसे (में .config/monitors.xml) याद रखता है और मॉनिटर या प्लग में प्लग होने पर स्वचालित रूप से इसे लागू करता है।

अफसोस की बात है कि मॉनिटर। Xml फ़ाइल में कॉन्फ़िगरेशन अच्छी तरह से प्रलेखित नहीं है। प्रश्न यहाँ देखें । गनोम डिस्प्ले टूलिंग में पैनिंग सेट करने, मॉनिटर पर स्केलिंग करने का कोई साधन नहीं है और यह ज़ूम-आउट नहीं करता है। कई लोग एक नियमित DPI स्क्रीन के साथ एक HiDPI लैपटॉप स्क्रीन का उपयोग कर रहे हैं, उपकरण एक व्यावहारिक समाधान प्राप्त करने के लिए पर्याप्त नहीं हैं।

मैंने इसे वीलैंड के लिए एक रोडमैप आइटम के रूप में उल्लेख किया है, हालांकि जब यह अंत में आता है तो हम उल्लेखित मुद्दों के लिए एक ठीक देख सकते हैं। तब तक Gnome पर मैं मैन्युअल रूप से xrandr सेटअप करने में देरी के बाद एक स्टार्टअप स्क्रिप्ट चलाता हूं।


1

उदाहरण के लिए Xfce में सरलीकरण करने के लिए कृपया "अरैंडर" स्थापित करें जो आपके डिस्ट्रो पैकेज में उपलब्ध होना चाहिए। "Arandr" का उपयोग करके अपने प्रदर्शन को कॉन्फ़िगर करें फिर इसे "displayLayout" के रूप में सहेजें उदाहरण के लिए। अरण्डर को आपके लिए ".sh" एक्सटेंशन जोड़ना चाहिए, ताकि इसे सीधे "फंक्शन कनेक्ट ()" में इस्तेमाल किया जा सके, जैसा कि ऊपर दिए गए आयरिन द्वारा उल्लिखित "हॉटप्लग_मोनिटर.श" लिपि में लिखा गया है:

function connect(){
 /path/to/displayLayout.sh
}

"#! / Bin / bash" की तरह नीचे स्क्रिप्ट के शीर्ष पर डिस्कनेक्ट तंत्र जोड़ने का उपयोग करें:

#!/bin/bash
#
PLUGGED_EXTERNAL=`xrandr | awk /"connected [0-9]"/'{print $1}'`

xrandr डिस्प्ले का पता लगाएगा और आउटपुट को जगाएगा जो कि इसे रेगुलर एक्सप्रेशन "कनेक्टेड" के आधार पर फ़िल्टर करेगा, उसके बाद एक अंक आएगा जो कि हम चाहते हैं। मेरी राय में नियमित अभिव्यक्ति में सटीक रिज़ॉल्यूशन का मिलान करना आवश्यक नहीं है क्योंकि प्राथमिक प्रदर्शन को "कनेक्टेड प्राइमरी" के रूप में सूचित किया जाता है और उसके बाद नंबर अर्थात रिज़ॉल्यूशन दिया जाता है। फिर awk "प्रिंट $ 1" केवल पहला कॉलम प्रिंट करेगा जो इस मामले में बाहरी मॉनिटर का नाम है और इसे PLUGGED_EXTERNAL चर में संग्रहीत किया जाएगा। स्क्रिप्ट में नियत प्रदर्शन नाम "HDMI1" के बजाय $ PLUGGED_EXTERNAL का उपयोग किया जा सकता है:

function disconnect(){
  xrandr --output $PLUGGED_EXTERNAL --off
}

xrandr | grep "$PLUGGED_EXTERNAL connected" &> /dev/null && connect || disconnect

0

सेटअप करने के लिए इसे सरल बनाने के लिए मेरे उत्तर का संपादन।

Xrandr में स्क्रीन लेआउट को स्वचालित, से नवीनतम .deb हड़पने के लिए autorandr स्थापित https://github.com/nalipaz/autorandr/releases और चलाएँ:

dpkg -i [file]

संग्रहीत स्क्रीन लेआउट के साथ सेटअप ऑटोरैंडर

autorandr --save [docked|mobile|home|etc]

एक उदाहरण के रूप में, बिना किसी मॉनिटर के मेरे लैपटॉप पर प्लग इन किया गया, मैं सेटअप चाहता हूं कि मैं इसे चाहता हूं, फिर भाग गया:

autorandr --save mobile

फिर मेरी hdmi में खामियों को दूर किया और फिर से जोड़ दिया, फिर भाग गया:

autorandr --save docked

अपने प्रत्येक लेआउट को स्थापित करने के बाद आप चला सकते हैं (पिछले पसंदीदा नाम के साथ 'मोबाइल' बदलें, मैंने मोबाइल का उपयोग किया है):

autorandr --default mobile

अब जब ऑटोरैन्डर सब सेटअप है तो आप एक पैकेज स्थापित करके प्रक्रिया को स्वचालित कर सकते हैं जो कनेक्टेड डिस्प्ले के लिए सर्वेक्षण करेगा और autorandr --changeपता लगाने पर चलेगा । हां, मुझे udv के बारे में पता है और आप इसे सेट कर सकते हैं यदि यह आपके लिए काम करता है, लेकिन मेरे परीक्षण में udv ने मेरे hdmi के लिए लगातार काम नहीं किया। यह हर 20 प्लग / अनप्लग या में से केवल 1 काम करता था और कभी-कभी यह पूरी तरह से बंद हो जाता था।

यहां से नवीनतम .deb डाउनलोड करें: https://github.com/nalipaz/poll-xrandr/releases/ फिर इसके साथ इंस्टॉल करें

dpkg -i [file]

यह सबसे आवश्यक है कि आप पूरा होने पर अधिक कार्य चलाते हैं autorandr --change, ऑटोरैंडर इन कमांडों को ~ / .autorandr / postswitch नामक फाइल में डालने की अनुमति देता है। निम्नानुसार करें:

cd ~/.autorandr/ && touch postswitch && chmod +x postswitch

अब निम्नलिखित के समान कुछ करने के लिए पोस्टस्विच फ़ाइल को संपादित करें:

#!/bin/bash
if pidof conky > /dev/null 2>&1; then
  killall conky
fi
(sleep 2s && xrandr-adjust-brightness restore -q) &
(sleep 2s && nitrogen --restore) &
(sleep 3s && conky -q) &

इसके अतिरिक्त आप संभवतः अपने स्टार्टअप्स में ऑटोरैंडर और पोल-ज़ेंडर को जोड़ना चाहेंगे, निम्न दो आज्ञाओं की तरह कुछ:

autorandr --change &
poll-xrandr &

एक मॉनिटर में अनप्लग या प्लग करें और जादू देखें!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.