首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过SSH更改远程windows主机的屏幕分辨率

通过SSH更改远程windows主机的屏幕分辨率
EN

Stack Overflow用户
提问于 2013-12-17 07:42:16
回答 2查看 2K关注 0票数 0

我试图通过SSH修改远程窗口主机的屏幕分辨率。首先,我使用python编写了一个小脚本来改变本地桌面的分辨率。

代码语言:javascript
复制
import win32api
dm = win32api.EnumDisplaySettings(None, 0)
dm.PelsHeight = 1024    
dm.PelsWidth = 1280

win32api.ChangeDisplaySettings(dm, 0)

然后,使用pyinstaller将其构建为独立的.exe文件,将输出的文件放到远程主机上,并通过SSH执行该工具。

代码语言:javascript
复制
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(remote_win_host_ip, username= host_user, password=host_pswd)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('/cygdrive/e/test/change_screen_res.exe')

同时,我编写了一个脚本来显示当前的分辨率,并以同样的方式在远程主机上使用它。

代码语言:javascript
复制
from win32api import GetSystemMetrics

print "width =", GetSystemMetrics (0)
print "height =",GetSystemMetrics (1)

但是,我发现远程主机的分辨率始终是1024*768

我怎样才能修改决议?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-07 09:24:02

看来Windows根本不支持这种操作。我尝试了许多不同的ssh客户端和屏幕分辨率修改工具,都没有工作。

但是,感谢Jenkins从代理并引用jenkins-on-windows-and-gui-tests-without-rdc,有一个解决办法。

票数 0
EN

Stack Overflow用户

发布于 2013-12-17 07:53:32

代码语言:javascript
复制
from os import fork, waitpid, execv, read, write
import pty, sys

class ssh():
    def __init__(self, host, execute='echo "done" > /root/testing.txt', askpass=False, user='root', password='UberPassword'):
        self.exec = execute
        self.host = host
        self.user = user
        self.password = password
        self.askpass = askpass
        self.run()

    def run(self):
        command = [
                '/usr/bin/ssh',
                self.user+'@'+self.host,
                '-o', 'NumberOfPasswordPrompts=1',
                self.exec,
        ]

        pid, child_fd = pty.fork()

        if not pid: # Child process
            # Replace child process with our SSH process
            execv(command[0], command)

        ## if we havn't setup pub-key authentication
        ## we can loop for a password promt and "insert" the password.
        while self.askpass:
            try:
                output = read(child_fd, 1024).strip()
            except:
                break
            lower = output.lower()
            # Write the password
            if b'password:' in lower:
                write(child_fd, self.password + b'\n')
                break
            elif b'are you sure you want to continue connecting' in lower:
                # Adding key to known_hosts
                write(child_fd, b'yes\n')
            elif b'MOTD and Leagal warning' in lower:
                pass # This is an understood message
            else:
                print('Error:',output)

        waitpid(pid, 0)

多亏了pty,才能在linux上工作。另一个简短的解决方案是(但您需要公钥):

代码语言:javascript
复制
from subprocess import Popen, PIPE, STDOUT

x = Popen("ssh -t -t root@hostname.com 'echo \"done\" > /root/testing.txt'", shell=True, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
while x.poll() == None:
    pass
x.stdout.close()
x.stdin.close()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20628561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档