konsole-4.9.2的简单功能补丁

发布: 2012-10-29 13:14

通过使用kbookmark类的description字段存储密码(当然是明文存储的),

在执行kbookmark中的ssh会话连接时,取出这个字码的值,

通过系统的sshpass执行自动登陆。


补丁.patch

[code type="diff"]
diff --git a/src/BookmarkHandler.cpp b/src/BookmarkHandler.cpp
index 99bf0ce..b4e6c8b 100644
--- a/src/BookmarkHandler.cpp
+++ b/src/BookmarkHandler.cpp
@@ -68,9 +68,20 @@ BookmarkHandler::~BookmarkHandler()
delete _bookmarkMenu;
}

+#include
void BookmarkHandler::openBookmark(const KBookmark& bm, Qt::MouseButtons, Qt::KeyboardModifiers)
{
- emit openUrl(bm.url());
+ // qDebug()< +
+ if (bm.description().trimmed().length() > 0) {
+ KUrl aurl = bm.url();
+ aurl.setPassword("aaaabcd");
+ aurl.setPassword(bm.description().trimmed());
+ qDebug()< + emit openUrl(aurl);
+ } else {
+ emit openUrl(bm.url());
+ }
}
void BookmarkHandler::openFolderinTabs(const KBookmarkGroup& group)
{
diff --git a/src/SessionController.cpp b/src/SessionController.cpp
index ccae55f..8094f7d 100644
--- a/src/SessionController.cpp
+++ b/src/SessionController.cpp
@@ -271,6 +271,8 @@ void SessionController::rename()

void SessionController::openUrl(const KUrl& url)
{
+ // qDebug()< +
// handle local paths
if (url.isLocalFile()) {
QString path = url.toLocalFile();
@@ -281,6 +283,23 @@ void SessionController::openUrl(const KUrl& url)
QString command = url.prettyUrl();
if (!command.isEmpty())
_session->emulation()->sendText(command + '\r');
+ } else if (url.protocol() == "ssh" && url.password().length() > 0
+ && (QFile("/usr/bin/sshpass").exists()
+ || QFile("/usr/local/bin/sshpass").exists())) {
+ QString esc_passwd = url.password().replace("!", "\\!").replace("$", "\\$");
+ QString sshCommand = "sshpass -p " + esc_passwd + " ssh -CXY ";
+
+ if (url.port() > -1) {
+ sshCommand += QString("-p %1 ").arg(url.port());
+ }
+ if (url.hasUser()) {
+ sshCommand += (url.user() + '@');
+ }
+ if (url.hasHost()) {
+ sshCommand += url.host();
+ }
+
+ _session->sendText(sshCommand + '\r');
} else if (url.protocol() == "ssh") {
QString sshCommand = "ssh ";

[/code]

虽然一直在用kde,但这还是第一次做kde的功能补丁,这次其实只了解了KBookmark类的实现位置和功能。

KBookmark实现是在kio组件,比较核心的部分,方便上层组件共享。

了解了konsole中的bookmarkhandler和sessioncontroller两个部分。

未来计划:
除了这个功能hack之外,还希望能做个ssh会话的标签clone功能。




原文: http://qtchina.tk/?q=node/693

Powered by zexport