Tmux को कैसे सेट करें ताकि यह निर्दिष्ट विंडो के साथ शुरू हो?


जवाबों:


258

आप एक छोटा शेल स्क्रिप्ट लिख सकते हैं जो आवश्यक कार्यक्रमों के साथ tmux लॉन्च करता है। मेरे पास शेल स्क्रिप्ट में निम्नलिखित है जिसे मैं डेम-टमक्स कहता हूं। एक देव वातावरण:

#!/bin/sh
tmux new-session -d 'vim'
tmux split-window -v 'ipython'
tmux split-window -h
tmux new-window 'mutt'
tmux -2 attach-session -d

इसलिए हर बार मैं अपना पसंदीदा देव वातावरण लॉन्च करना चाहता हूं

$ dev-tmux

4
धन्यवाद! मुझे कुछ भयानक भागने के लिए यह करना पड़ा ताकि काम करने के लिए संयुक्त रूप से काम किया जा bash --rcfileसके ताकि एक विशेष भक्ति चार्ट सक्षम के साथ वैज्ञानिक लिनेक्स पर एक अच्छा खोल मिल सके। अगर कोई ऐसा करने की कोशिश करता है तो इसे यहां छोड़ देंगे। tmux new-window -n "git lg" "scl enable devtoolset-3 'bash --rcfile <(echo \"source \"$HOME/.bashrc\";cd ~/workspace/coolproject/;git lg\")'"
लल्लन

1
मुझे लगता है कि दूसरी पंक्ति को बदलना चाहिए, इसे 'vim' से पहले 's' विकल्प की जरूरत है। इसका अर्थ है "tmux new-session -d 'vim'" को "tmux new-session -d -s '-s' vim 'द्वारा प्रतिस्थापित किया जाना चाहिए
अहमद येओसोफन

2
@ अम्माद्यसोफान, vimवहाँ पहले से (और उस समय केवल) विंडो के फलक में निष्पादित होने वाली कमांड के लिए खड़ा है। यदि आप इसके बजाय सत्र 'विम' का नाम रखना चाहते हैं, तो हाँ, आप सही हैं, आपको -sध्वज का उपयोग करने के लिए मिला है । सम्पूर्ण वाक्य-विन्यास: tmux new-session -d -s SessionName -n WindowName Command
मटका

बाहर देखें: यदि आपने पहले से ही (कहीं और) एक tmux सत्र शुरू किया है, तो कमांड दूसरे सत्र में समाप्त हो सकते हैं! @ वकार-लिम के जवाब में यह समस्या नहीं है।
haja

173

मैं पैन का एक जटिल ग्रिड बनाने की कोशिश कर रहा था और बार-बार स्विचिंग और बंटवारे के पैन से निपटना था। ये मेरी सीख हैं:

tmux new-session \;

एक नए सत्र के साथ आपकी शुरुआत होती है। इसे क्षैतिज या ऊर्ध्वाधर उपयोग split-window -hया -vबाद में विभाजित करने के लिए , जैसे:

tmux new-session \; split-window -v \; split-window -h \;

इस तरह से 3 पैन बनाता है:

------------
|          |
|----------|
|    |     |
------------

उस पैन में कमांड चलाने के लिए, बस उन्हें send-keys 'my-command'कमांड के साथ जोड़ें और C-mजो इसे निष्पादित करता है:

tmux new-session \; \
  send-keys 'tail -f /var/log/monitor.log' C-m \; \
  split-window -v \; \
  split-window -h \; \
  send-keys 'top' C-m \; 

और परिणामी सत्र को इस तरह दिखना चाहिए।

------------
|  tail    |
|----------|
|    | top |
------------

अब मैंने फिर से नीचे के बाएँ फलक को उप-विभाजित करने का प्रयास किया, इसलिए या तो उपयोग करके वापस स्विच करना last-pane, या अधिक जटिल विंडो में, select-pane -t 1जहाँ 1से शुरू किया गया क्रम में फलक की संख्या है 0

tmux new-session \; \
  send-keys 'tail -f /var/log/monitor.log' C-m \; \
  split-window -v \; \
  split-window -h \; \
  send-keys 'top' C-m \; \
  select-pane -t 1 \; \
  split-window -v \; \
  send-keys 'weechat' C-m \;

क्या वो। Basicaly के साथ अपने तरीके से जानने split-windowऔर select-paneआप सभी की जरूरत है। -p 75पैन के आकार split-windowपर अधिक नियंत्रण रखने के लिए बनाए गए फलक के प्रतिशत आकार के साथ पास करना भी आसान है ।

tmux new-session \; \
  send-keys 'tail -f /var/log/monitor.log' C-m \; \
  split-window -v -p 75 \; \
  split-window -h -p 30 \; \
  send-keys 'top' C-m \; \
  select-pane -t 1 \; \
  split-window -v \; \
  send-keys 'weechat' C-m \;

जिसके परिणामस्वरूप एक सत्र जैसा दिखता है

------------------
|      tail      |
|----------------|
|          | top |
|----------|     |
| weechat  |     |
------------------

आशा है कि tmuxभविष्य में उत्साही मदद करता है ।


2
अद्भुत दिशानिर्देश, क्या आप मुझे बता सकते हैं कि विभाजन के बाद ऊर्ध्वाधर पैनल की चौड़ाई का आकार कैसे बदल सकता है।
मिन्न्नवी Minh

2
@MinhNV -h -p 30उपलब्ध ऊंचाई के 30% के साथ एक क्षैतिज पैनल बनाता है; -v -p 7575% चौड़ाई के साथ ऊर्ध्वाधर के लिए समान।
अफर

1
का उद्देश्य क्या है \:? मैंने इसके साथ और इसके बिना स्क्रिप्ट के काम को देखा है।
केविन मैकडोनो

2
अद्यतन: \;अर्धविराम को बैश के बजाय tmux पर भेजता है, जिससे कमांड को tmux में एक कॉल के साथ भेजा जा सकता है। stackoverflow.com/questions/20913198/…
केविन मैकडोनो

96

आप अपनी .tmux.confतरह से अलग-अलग सत्रों को स्रोत कर सकते हैं :

# initialize sessions
bind S source-file ~/.tmux/session1 
bind s source-file ~/.tmux/session2

और फिर सत्रों को प्रारूपित करें जैसे आपको चाहिए:

#session1
new  -s SessionName -n WindowName Command
neww -n foo/bar foo
splitw -v -p 50 -t 0 bar
selectw -t 1 
selectp -t 0

इससे 2 खिड़कियां खुलेंगी, जिनमें से दूसरे को फू / बार नाम दिया जाएगा और बार के ऊपर चलने वाले फू के साथ आधे (50%) में लंबवत रूप से विभाजित किया जाएगा। फोकस विंडो 2 (फू / बार), टॉप पेन (फू) में होगा।

फिर आप अपना पसंदीदा tmux सेशन शुरू कर सकते हैं (इस मामले में, session1) PrefixShifts


4
क्या अतिरिक्त फ़ाइलों की आवश्यकता के बिना उन सत्रों को .tmux.conf के अंदर शुरू नहीं किया जा सकता है?
Eno

2
उनमें से एक हो सकता है: इस तरह से आप आसानी से अधिक अनुरूप सत्र जोड़ सकते हैं - और छोटे पाठ फ़ाइलों की एक जोड़ी शायद ही एक उपरि है ...
jasonwryan

1
यह सत्र घोंसले के शिकार नहीं होगा? मेरा मतलब है कि मुझे चलाने के Prefix Shift Sलिए tmux में होना चाहिए और अपनी फ़ाइल को सोर्स करने के लिए एक नया सत्र शुरू करने की कोशिश करता है जो tmux को पसंद नहीं है और जब तक आप इसे करने के लिए मजबूर नहीं करेंगे।
user35915

1
@ user35915 यह केवल एक बाल सत्र शुरू नहीं करेगा, लेकिन एक अलग - उस पर आप उदाहरण के लिए उपसर्ग-उप या उपसर्ग का उपयोग करने के लिए स्विच कर सकते हैं-) और उपसर्ग- (
sehe

1
यह स्वीकृत उत्तर होना चाहिए। हालांकि एस (बाइंडिंग एस) के लिए बाइंडिंग लिस्टिंग सत्रों के लिए बिल्ट-इन tmux बाइंडिंग को ओवरराइड करेगा।
गिनती 05

54

Tmuxinator का उपयोग करें - यह आपको कई सत्रों को कॉन्फ़िगर करने की अनुमति देता है, और आप यह चुन सकते हैं कि किसी भी समय कौन सा लॉन्च किया जाए। आप विशेष विंडो या पैन में कमांड लॉन्च कर सकते हैं और खिड़कियों को शीर्षक दे सकते हैं। यहाँ Django अनुप्रयोगों के विकास के साथ एक उदाहरण का उपयोग किया जाता है

नमूना विन्यास फाइल:

# ~/.tmuxinator/project_name.yml
# you can make as many tabs as you wish...

project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed. Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
  - editor:
      layout: main-vertical
      panes:
        - vim
        - #empty, will just run plain bash
        - top
  - shell: git pull
  - database: rails db
  - server: rails s
  - logs: tail -f logs/development.log
  - console: rails c
  - capistrano:
  - server: ssh me@myhost

पूर्ण विवरण के लिए उपरोक्त लिंक पर README देखें।


2
tmuxinator मूलतः वही है जो मैं देख रहा था। धन्यवाद!
जस्टिन फोर्स

3
वहाँ भी tmuxp है जो काफी हद तक समान है: github.com/tony/tmuxp
Ben Creasy


16
:~$ tmux new-session "tmux source-file ~/session1"  

सत्र 1

neww
split-window -v 'ipython'  
split-window -h  
new-window 'mutt'  

एक उपनाम बनाएँ .bashrc

:~$ echo `alias tmux_s1='tmux new-session "tmux source-file ~/session1"'` >>~/.bashrc  
:~$ . ~/.bashrc  
:~$ tmux_s1  

~ क्या है neww? मुझे वह आदेश कहीं भी नहीं मिल रहा है। ~ ऐसा लग रहा है कि यह है new-window, हालांकि मैं यह नहीं समझ सकता कि आप लंबे और छोटे दोनों रूपों का उपयोग क्यों करते हैं।
ऑलिगॉफ्रेन

11

पहले मेरे पास @jasonwryan से अप्रोच था लेकिन अगर आपके पास अधिक है तो 2 कॉन्फिग , यह भ्रमित कर सकता है।

इसलिए मैंने एक उपनाम समारोह बनाया:

tmx () {
    tmux "$2" source-file "$HOME/.tmux/$1.conf";
}

में ~/.tmux/मैं कई उपयोगों के लिए कई सत्रों की है। उदाहरण के लिए मैं अलग-अलग कंपनियों के लिए काम करता हूं जिनके पास एक-दूसरे का देव वातावरण है। तो ऊपर दिए गए अन्य फ़ंक्शन के साथ मैं बस कॉल कर सकता हूं: tmx company1और मुझे जिस कॉन्फ़िगरेशन की आवश्यकता है उसे लोड करें।

अद्यतन:tmux कमांड के बाद "$ 2" का उद्देश्य है, कि आप अतिरिक्त tmux args पास करने में सक्षम हैं।


1
@ Social1c की युक्तियों के साथ इसे जोड़कर एक सुपर-स्वीट सेटअप ( github.com/fatso83/dotfiles/commit/35a7ed ) बनाया गया। धन्यवाद!
ओलिगोफ़्रेन

फ़ंक्शन वास्तव में तब काम नहीं करता है जब पहले से मौजूद हुक (पाने no server running on /tmp/tmux-1000/default) के लिए tmux सत्र नहीं है । इसलिए मुझे इसके साथ कमांड पैच करने की आवश्यकता थी tmux new-session। रेफ github.com/fatso83/dotfiles/commit/…
oligofren

1
मैंने अपना tmux सेटअप सिस्टमड के साथ किया। इसलिए बूट के बाद हमेशा एक सत्र चल रहा है। wiki.archlinux.org/index.php/Tmux#Autostart_with_systemd इसका उल्लेख न करने के लिए क्षमा करें।
danbruegge

10

मेरी "get.all" स्क्रिप्ट से, जिसे मैं प्रत्येक सुबह बाद में "get.XXX" नौकरियों का एक गुच्छा चलाने के लिए आह्वान करता हूं कि मैं जिस सॉफ़्टवेयर को ट्रैक करता हूं, उसे ताज़ा करें। उनमें से कुछ ऑटो छोड़ने वाले हैं। दूसरों को एक बार बातचीत खत्म करने की आवश्यकता होती है (जैसे ईमैक बनाने के लिए पूछना)।

#!/bin/sh
tmux att -t get ||
tmux \
  new -s get -n capp \; \
  send-keys 'get.capp' C-m \; \
  neww -n emacs \; \
  send-keys 'get.emacs' C-m \; \
  neww -n git \; \
  send-keys 'get.git' C-m \; \
  neww -n mini \; \
  send-keys 'get.mini' C-m \; \
  neww -n port \; \
  send-keys 'get.port' C-m \; \
  neww -n rakudo \; \
  send-keys 'get.rakudo' C-m \; \
  neww -n neil \; \
  send-keys 'get.neil && get.neil2 && exit' C-m \; \
  neww -n red \; \
  send-keys 'get.red && exit' C-m \; \
  neww -n cpan \; \
  send-keys 'get.cpan && exit' C-m \; \
  selectw -t emacs

8

यदि आप स्क्रीन को 2 पैन पर विभाजित करना चाहते हैं (क्षैतिज रूप से कहें), तो आप इस कमांड को चला सकते हैं (आवश्यक कोई टमक्स या शेल स्क्रिप्ट नहीं):

tmux new-session \; split-window -h \;

आप स्क्रीन इस तरह दिखेगा:

[ks@localhost ~]$                      │[ks@localhost ~]$ 
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
                                       
[10] 0:ks@localhost:~*                  "localhost.localdomain" 19:51 31-янв-16

8

और यह है कि मैं यह कैसे करते हैं:

#!/bin/bash

function has-session {
  tmux has-session -t name_of_my_session 2>/dev/null
}

if has-session ; then
  echo "Session already exists"
else
  cd /path/to/my/project
  tmux new-session -d -s name_of_my_session 'vim'
  tmux split-window -h -p 40 start_web_server
  tmux split-window -v
  tmux attach-session -d -t name_of_my_session
fi

मेरे पास मेरे प्रत्येक प्रोजेक्ट के लिए एक फाइल है। इसके अलावा, आप उन्हें शौक परियोजनाओं के लिए कुछ काम करने के लिए समूह कर सकते हैं।

इसके अलावा, आप इसे ~/binफ़ोल्डर में ले जा सकते हैं , इसे जोड़ सकते हैं PATHऔर tmux_my_awesome_projectनाम दे सकते हैं । तब आप इसे प्रत्येक स्थान से चला पाएंगे।


4

यह मेरे लिए काम करता है। दिए गए नामों के साथ 5 विंडो बनाना और homeविंडो को ऑटो सेलेक्ट करना ।

new  -n home
neww -n emacs
neww -n puppet
neww -n haskell
neww -n ruby
selectw -t 1

3

कोशिश करो भाई , यह एक प्रोजेक्ट बूटस्ट्रैपर है।

यह बातचीत करने के लिए आसान एपिस प्रदान करता है tmux

यह कुछ इस तरह दिखता है:

#!/bin/sh
# @ project_name/tasks/init.sh
structure project_name
  window editor
    run 'vim'
  window terminal
    run 'echo happy coding ...'
focus editor
connect project_name

परियोजना शुरू करने के लिए सभी को निम्नलिखित आदेश की जरूरत है -

bro start <project_name>

नीचे दिए गए पेंचकस को चेकआउट करें, यह दिखाता है कि कैसे शुरू किया जाए broऔर अपने tmuxएपीआई का उपयोग करें ।

https://user-images.githubusercontent.com/8296449/50532502-2cf3e400-0b6e-11e9-84af-c5f77a04e5cc.gif


2

इसके लिए tmux plugin है।

की जाँच करें tmux-जीवित

सिस्टम पुनरारंभ होने के बाद tmux वातावरण को पुनर्स्थापित करें।

Tmux बहुत बढ़िया है, सिवाय इसके जब आपको कंप्यूटर को पुनरारंभ करना हो। आप सभी चल रहे प्रोग्राम, वर्किंग डाइरेक्टरीज़, पेन लेआउट आदि को खो देते हैं। वहाँ पर सहायक प्रबंधन उपकरण होते हैं, लेकिन उन्हें आपके कॉन्फ़िगरेशन विकसित होने या नए प्रोजेक्ट शुरू करने के लिए प्रारंभिक कॉन्फ़िगरेशन और निरंतर अपडेट की आवश्यकता होती है।

tmux-resurrect आपके tmux वातावरण से सभी छोटी-छोटी जानकारियों को बचाता है ताकि सिस्टम रीस्टार्ट (या जब आपको ऐसा लगे) के बाद इसे पूरी तरह से बहाल किया जा सके। कोई कॉन्फ़िगरेशन की आवश्यकता है। आपको ऐसा महसूस होना चाहिए कि आपने कभी tmux नहीं छोड़ा है।

या tmux- सातत्य

विशेषताएं:

  • tmux पर्यावरण की निरंतर बचत
  • कंप्यूटर / सर्वर चालू होने पर स्वचालित tmux शुरू होता है
  • tmux शुरू होने पर स्वचालित पुनर्स्थापना

1

आपको इसे अपनी tmux config फाइल में निर्दिष्ट करना चाहिए ( ~/.tmux.conf), उदाहरण के लिए:

new mocp
neww mutt

new -d
neww
neww

(पहले सत्र में 2 विंडो के साथ एक सत्र खोलता है और दूसरे में उत्परिवर्तित म्यूट, और 3 खाली खिड़कियों के साथ एक और अलग सत्र)।


1

मैंने यह स्क्रिप्ट बनाई है । इसे tmuxinator, माणिक या अन्य की आवश्यकता नहीं है। यह सिर्फ एक बैश स्क्रिप्ट है, विन्यास योग्य:

कॉन्फ़िगरेशन नामक फ़ाइल में कुछ इस तरह होना चाहिए:

combo=()
combo+=('logs' 'cd /var/log; clear; pwd')
combo+=('home' 'cd ~; clear; pwd')

और बैश कोड होना चाहिए:

#!/bin/bash

if [ -r config ]; then
    echo ""
    echo "Loading custom file"
    . config
else
    . config.dist
fi

tmux start-server

window=0
windownumber=-1

for i in "${combo[@]}"; do

    if [ $((window%2)) == 0 ]; then
        name=${i}
        ((windownumber++))
    else
        command=${i}
    fi

    if [ ${combo[0]} == "${i}" ]; then
        tmux new-session -d -s StarTmux -n "${name}"
    else
        if [ $((window%2)) == 0 ]; then
            tmux new-window -tStarTmux:$windownumber -n "${name}"
        fi
    fi

    if [ $((window%2)) == 1 ]; then
        tmux send-keys -tStarTmux:$windownumber "${command}" C-m
    fi

    ((window++))
done

tmux select-window -tStarTmux:0
tmux attach-session -d -tStarTmux

हाय सेंसरियो, जबकि यह लिंक प्रश्न का उत्तर दे सकता है, उत्तर के आवश्यक हिस्सों को यहां शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक-केवल उत्तर अमान्य हो सकते हैं यदि लिंक किए गए पृष्ठ बदल जाते हैं। कृपया यहां देखें: कुछ उत्तर क्यों और कैसे हटाए गए हैं?
बुम्मी

Nb आश्चर्यजनक रूप से, tmux start_serverअपने आप एक सर्वर शुरू नहीं करता है। देखिए github.com/tmux/tmux/issues/182
जैक वासी

1

tmuxp JSON या YAML सत्र विन्यास और एक अजगर एपीआई का समर्थन करता है। YAML सिंटैक्स में एक नया सत्र बनाने के लिए एक साधारण tmuxp कॉन्फ़िगरेशन फ़ाइल है:

session_name: 2-pane-vertical
windows:
  - window_name: my test window
    panes:
      - pwd
      - pwd

1

प्लगइन tmux-Continum आपके tmux सेशन को ऑटो करेगा और अगली बार tmux शुरू होने पर लोड करेगा, यहाँ कुछ कस्टम स्क्रिप्ट सॉल्यूशंस की तुलना में सेटअप करना आसान होना चाहिए।

विशेषताएं:

  • tmux पर्यावरण की निरंतर बचत
  • कंप्यूटर / सर्वर चालू होने पर स्वचालित tmux शुरू होता है
  • tmux शुरू होने पर स्वचालित पुनर्स्थापना

मांग पर अपने सत्र को बचाने के लिए आप tmux-resurrect प्लगइन का उपयोग कर सकते हैं । tmux-resurrect को tmux-Continum चलाने की भी आवश्यकता है

tmux-resurrect आपके tmux वातावरण से सभी छोटी-छोटी जानकारियों को बचाता है ताकि सिस्टम रीस्टार्ट (या जब आपको ऐसा लगे) के बाद इसे पूरी तरह से बहाल किया जा सके। कोई कॉन्फ़िगरेशन की आवश्यकता है। आपको ऐसा महसूस होना चाहिए कि आपने कभी tmux नहीं छोड़ा है।


1

नया सत्र बनने पर कमांड निष्पादित करने के लिए आप tmux हुक का उपयोग कर सकते हैं । विशेष रूप से, यह session-createdहुक का उपयोग करके प्राप्त किया जाता है ।

उदाहरण के लिए, स्क्रीन को तीन तरीकों से विभाजित करने के लिए नीचे दायीं ओर चल रहे htop के साथ आप अपनी ~/.tmux.confफ़ाइल में निम्न पंक्ति जोड़ सकते हैं :

set-hook -g session-created 'split -h ; split -v top'

इस पद्धति का लाभ यह है कि आपको वांछित परिणाम प्राप्त करने के लिए किसी भी विशेष तरीके (यानी, शेल स्क्रिप्ट या उपनाम) में tmux को चलाने की आवश्यकता नहीं है। आप इसे इस अन्य उत्तरtmux new-session -A -s mysession में वर्णित के साथ भी जोड़ सकते हैं जैसे हुक कमांड केवल तभी चलते हैं जब आप पहली बार सत्र बनाते हैं और बाद के अनुलग्नकों पर नहीं।

इस सुविधा को d15d54c2c द्वारा 2016 में वापस जोड़ा गया था । इसे शामिल करने वाली पहली रिलीज़ 2.4 है।


0

मैंने इस पृष्ठ पर सभी विचारों का उपयोग करने की कोशिश की और मुझे उनमें से कोई पसंद नहीं आया। मुझे बस एक समाधान चाहिए था जो कि मेरे टर्मिनल के खुलने पर खिड़कियों के एक विशिष्ट सेट के साथ शुरू हुआ। मैं यह भी चाहता था कि यह एक आदर्श हो, यानी एक नई टर्मिनल विंडो खोलने से पिछले एक सत्र से tmux सेशन होता है।

उपरोक्त समाधान अक्सर कई tmux सत्र खोलने के लिए करते हैं और मैं सिर्फ एक चाहता हूं। सबसे पहले, मैंने इसे अपने साथ जोड़ा ~/.bash_profile:

tmux start-server
if [[ -z "$TMUX" ]]
then
  exec tmux attach -d -t default
fi

तब मैंने निम्नलिखित को अपने साथ जोड़ा ~/.tmux.conf:

new -s default -n emacs /usr/local/bin/emacs
neww -n shell /usr/local/bin/bash
neww -n shell /usr/local/bin/bash
selectw -t 1

अब हर बार मैं एक टर्मिनल शुरू करता हूं या tmux या जो भी शुरू करता हूं, मैं या तो अपने मौजूदा वांछित सेटअप (नाम वाले सत्र default) को रीटेट करता हूं , या उस सेटअप के साथ एक नया सत्र बनाता हूं ।


आश्चर्यजनक रूप से, tmux start_serverअपने आप एक सर्वर शुरू नहीं करता है। देखें github.com/tmux/tmux/issues/182
जैक वासी

0

यह स्क्रिप्ट "ई" और तीन विंडो नाम के साथ एक सत्र शुरू करती है

#!/bin/sh 
tmux new-session -s e   -n etc -d 'cd /etc; bash -i'
tmux new-window  -t e:1 -n home   'cd ~; bash -i'
tmux new-window  -t e:2 -n log   'cd /var/log; bash -i'

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