www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2006/08/29/18:42:32

X-Spam-Check-By: sourceware.org
Message-ID: <44F4C2C4.6080807@lapo.it>
Date: Wed, 30 Aug 2006 00:42:12 +0200
From: Lapo Luchini <lapo AT lapo DOT it>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.5) Gecko/20060719 Thunderbird/1.5.0.5 Mnenhy/0.7.4.0
MIME-Version: 1.0
To: "[ML] CygWin " <cygwin AT cygwin DOT com>
Subject: ssh-agent variables available to any user process
OpenPGP: id=C8F252FB
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

--------------040601010006070600050403
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

Under FreeBSD, I launch ssh-agent in my .xsession script and its
environment is automatically inherited by every shell I then open in my
X11 session.
No such luck with Windows, but I found a way to propagate a environment
variable to any (future) user process after the user is already logged.
(or, at the very least...) Works for me.

Variables will be then available on any shell and program opened after
the attached script is executed.
(put it in "Startup" menu in order to execute it at logon time)

-- 
Lapo Luchini
lapo AT lapo DOT it (OpenPGP & X.509)
www.lapo.it (Jabber, ICQ, MSN)

--------------040601010006070600050403
Content-Type: application/x-javascript;
 name="ssh-agent.js"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ssh-agent.js"

var sh = new ActiveXObject("WScript.Shell");
// execute ssh-agent and store its output
var agent = sh.Exec("C:\\cygwin\\bin\\ssh-agent.exe -s");
var out = agent.StdOut.ReadAll();
// parse output
var re = /([^=]+)=([^;]+); export \1;/g;
while ((arr = re.exec(out)) != null) {
  // put the value in a volatile user variable
  sh.Environment("VOLATILE")(arr[1]) = arr[2];
}
// SETX a dummy variable for the side effect of broadcasting a WM_SETTINGCHANGE
sh.Run("setx XYZZYX 1", 0, true);
// remove the user variable set by SETX
sh.Environment("USER")("XYZZYX") = "2";  // let it know the value changed
sh.Environment("USER").Remove("XYZZYX"); // ...else this would fail


--------------040601010006070600050403
Content-Type: text/plain; charset=us-ascii

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/
--------------040601010006070600050403--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019