Jump to Navigation

konsole-4.9.2的简单功能补丁

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

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

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

补丁.patch

  1. diff --git a/src/BookmarkHandler.cpp b/src/BookmarkHandler.cpp
  2. index 99bf0ce..b4e6c8b 100644
  3. --- a/src/BookmarkHandler.cpp
  4. +++ b/src/BookmarkHandler.cpp
  5. @@ -68,9 +68,20 @@ BookmarkHandler::~BookmarkHandler()
  6. delete _bookmarkMenu;
  7. }
  8.  
  9. +#include <QtCore>
  10. void BookmarkHandler::openBookmark(const KBookmark& bm, Qt::MouseButtons, Qt::KeyboardModifiers)
  11. {
  12. - emit openUrl(bm.url());
  13. + // qDebug()<<bm.description()<<bm.fullText()<<bm.text()<<bm.address() << bm.url();
  14. +
  15. + if (bm.description().trimmed().length() > 0) {
  16. + KUrl aurl = bm.url();
  17. + aurl.setPassword("aaaabcd");
  18. + aurl.setPassword(bm.description().trimmed());
  19. + qDebug()<<aurl << aurl.password();
  20. + emit openUrl(aurl);
  21. + } else {
  22. + emit openUrl(bm.url());
  23. + }
  24. }
  25. void BookmarkHandler::openFolderinTabs(const KBookmarkGroup& group)
  26. {
  27. diff --git a/src/SessionController.cpp b/src/SessionController.cpp
  28. index ccae55f..8094f7d 100644
  29. --- a/src/SessionController.cpp
  30. +++ b/src/SessionController.cpp
  31. @@ -271,6 +271,8 @@ void SessionController::rename()
  32.  
  33. void SessionController::openUrl(const KUrl& url)
  34. {
  35. + // qDebug()<<url << url.password();
  36. +
  37. // handle local paths
  38. if (url.isLocalFile()) {
  39. QString path = url.toLocalFile();
  40. @@ -281,6 +283,23 @@ void SessionController::openUrl(const KUrl& url)
  41. QString command = url.prettyUrl();
  42. if (!command.isEmpty())
  43. _session->emulation()->sendText(command + '\r');
  44. + } else if (url.protocol() == "ssh" && url.password().length() > 0
  45. + && (QFile("/usr/bin/sshpass").exists()
  46. + || QFile("/usr/local/bin/sshpass").exists())) {
  47. + QString esc_passwd = url.password().replace("!", "\\!").replace("$", "\\$");
  48. + QString sshCommand = "sshpass -p " + esc_passwd + " ssh -CXY ";
  49. +
  50. + if (url.port() > -1) {
  51. + sshCommand += QString("-p %1 ").arg(url.port());
  52. + }
  53. + if (url.hasUser()) {
  54. + sshCommand += (url.user() + '@');
  55. + }
  56. + if (url.hasHost()) {
  57. + sshCommand += url.host();
  58. + }
  59. +
  60. + _session->sendText(sshCommand + '\r');
  61. } else if (url.protocol() == "ssh") {
  62. QString sshCommand = "ssh ";

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

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

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

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

Category:

添加新评论

Plain text

  • 不允许HTML标记。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.


Main menu 2

Story | by Dr. Radut