【自搓】PyDeck,让老手机发挥余热 - 极端低配/无售后/功能全靠DIY版 StreamDeck

PyDeck

让老手机发挥余热,给电脑增加功能键 - 极端低配/无售后/功能全靠DIY版 StreamDeck

缘起

小众软件论坛 的一个帖子:能代StreamDeck!免费、开源软件macro deck

看了之后,感觉极端低配版的 StreamDeck 很容易实现,就是写个 Web 服务器,根据用户点击链接在后台执行相应的程序。

小众论坛的 @dog 写了不少有趣又有用的小工具,我也用过,也学到了不少。

他在这个贴子里感叹自己之前搞的手机电脑交互不好用。

家里正好新装一台长期开机的小电脑,不接显示器键盘,每次操作都要开电脑连远程桌面。

于是就有了这个。

警告

因为是一天手搓的极端低配版,没有任何安全防护措施,只能在家里局域网内使用,服务器千万不能开放到互联网上,否则别人连上来就可以点击启动电脑内的程序,更别说高手说不定就能黑入电脑了。

免责

既然叫 极端低配/无售后/功能全靠DIY版,那肯定是 使用后果自负 啦!:stuck_out_tongue:

我写这个是为了自己家里长期开机的电脑用,一些常用的操作就不用连显示器键盘或者连远程桌面了。

使用说明

  • PyDeck.yaml

    Port: Web 服务侦听端口,防火墙要开放这个端口,否则其他设备无法连接 Web 服务。
    Title: 面板名称
    Icons Per Line: 每行应用图标个数
    Show Label: 是否显示应用名称,true|false
    Apps: 应用列表
    -   id: 应用ID,纯英文字符串
        name: 应用显示名称
        icon: 应用图标文件名,存放目录:PyDeck\icon,浏览器支持显示的格式都行,最好是正方形图片。
        command: 应用实际执行命令
        workdir: 应用起始路径
    
    • 所有字符串值最好都加英文单引号('),字符串里有双引号 (") 的一定要加单引号。

    • command 和 workdir 中,如果文件名或路径中有空格,需要加双引号。

    • command 和 workdir 的正确格式:

      可以认为在 PyDeck 服务器中有一个隐藏的 cmd 窗口,执行 START "[PyDeck] CMD" /I /D workdir command

      因此,如果将 command 和 workdir 填入其中后,在普通 cmd 窗口中可以运行成功,那么基本上 PyDeck 也可以成功执行命令。

  • PyDeck.stpl

    Deck 页面模板,可以自己修改。

    注意: {{ }} 中和 % 后的是 Python 代码。

  • icon\ 目录

    子目录 icon 里放的是应用图标文件,浏览器支持显示的格式都行,最好是正方形图片。

    icon\RELOAD.png 是 PyDeck 自用的,不要删除,除非修改了 PyDeck.stpl

客户端浏览器要求

页面没有 javascript,只用了 CSS,至少在我的 iPad 1 (iOS 5.1.1) 的 Safari 浏览器上没问题。

感谢

Github

Repo: cataerogong/PyDeck: 让老手机发挥余热,给电脑增加功能键 (github.com)

Release: Releases · cataerogong/PyDeck (github.com)

3 个赞

StreamDeck的优秀也不只是显示出功能键的图标来,而是动态性和扩展性。

  1. 能设置多个folder,每个folder有不同的按键和图标,根据前台程序自动切换folder,或者用户主动切换folder
  2. 有各种各样的扩展方便接入不同软件、硬件。比如直播OBS,智能家居,显示电脑资源占用,等等。
  3. 有实体按键(部分人比如我就非常喜欢按实体按键,不喜欢点击触摸屏。所以其实我也在考虑如何弄出廉价的有实体按键的micro deck)

如果抛开上边的几点,实际上论坛里活跃的quicker也有移动端,同样能够显示图标并发送控制PC的命令。

从我个人的角度讲,更希望大佬也能加入到micro deck的开发中,毕竟micro deck已经相对成熟,并且现在就可以通过网页连接使用。

原来你们说的是StreamDeck不是SteamDeck啊,我还在想那不是游戏机吗,怎么和文章内容不符

挺好用的,很简洁。赞!

不过有以下几个需求哈:

  1. 那个cmd窗口可以选择隐藏吗?

  2. 怎么通过ahk来进行reload,因为我想添加两个按钮,
    一个叫大大大,一个叫小小小,用来快捷改变每行图标数。
    之后可能还想快捷添加按钮之类的,需要更改yaml然后reload。

  3. 换个背景,纯黑色有点单调。

  4. 强制换行功能,不需要一行满了图标才放下一行(我在用平板使用,实际上一行12个图标,放50行没问题)

另外,我给大家推荐一个网站
字母图标生成器 | 汉字徽章图标一键生成 - 标小智LOGO神器 (logosc.cn)
输个汉字,然后截图,用来做图标很快,哈哈~

错别字

我再去研究研究 Macro Deck :smile:
我的初衷是想操控家里的小电脑,基本需求只是点一下图标跑个程序这样,Macro Deck 感觉重了点(100多M),而且我的客户端还可能是 iPad 1,iOS 才 5.1.1,看个电影都吃力 :joy:
纯粹自娱自乐的。

哇,真棒,我试了一下,kindle也可以用!
不过要是白色背景就好了,Kindle下黑色背景太难看了

建议给标题里加几个字——
~变成让老手机,老kindle发挥余热~

  1. 那个cmd窗口可以选择隐藏吗?

你是说 PyDeck.exe 的 console 窗?
两个方案:

  1. nircmd,不过关程序只能杀进程了

    > nircmd.exe exec hide PyDeck.exe
    
  2. 用你擅长的 ahk :wink:

哦,还有个3

3. 广告时间:我用 AutoIt3 写的小程序 cataerogong/AppTray: Apps in Tray (github.com),可以配置隐藏窗口运行程序,我用来跑类似 WebDAV 的各种需要常开的 console 程序。
编辑:广告失败了,AppTray 跑不了这个 :sob:

  1. 怎么通过ahk来进行reload,因为我想添加两个按钮,
    一个叫大大大,一个叫小小小,用来快捷改变每行图标数。
    之后可能还想快捷添加按钮之类的,需要更改yaml然后reload。

直接访问URL,应该可以,你试一下。

UrlDownloadToFile, http://ip:port/reload, temp\file
  1. 换个背景,纯黑色有点单调。

自己打开 PyDeck.stpl 去改,先备份。

  1. 强制换行功能,不需要一行满了图标才放下一行(我在用平板使用,实际上一行12个图标,放50行没问题)

你想学一下 Python 吗? :grin:

想学,不过总是被吓退,哈哈~
被缩进语法吓着了,我写autohotkey代码几乎都胡乱缩进。

其他的都明白了。
换行这里,我找人研究研究(其实我老婆正在学python)

1 个赞

看出来了,我改你的 ahk 第一件事就是整理缩进 :smile:

你可以用kindle改一个!!!

旧版kindle是红外触发的,所以说,不需要指头,更容易做出来实体按键感觉。

我现在正在研究怎么搞~

大家想法总是这么的一致,我现在写那玩意儿一个方向也是显示多功能按键,不过现阶段还在侧重信息显示部分

我只有文石电子书,没有kindle。电子书其实很麻烦,担心把屏弄坏

我打算用透明塑料(比如pet)做一个支架,上边覆盖一块剪开的透明塑料当按键,利用塑料片的弹性一定程度模拟按键手感,或者在侧面直接加橡胶碗,手指触底直接触发电容屏。

或者利用磁铁在上方吸按键,用橡皮筋从上方拉之类的。总之这周还没时间搞……

已star,

  1. cmd窗口可以隐藏的,我现在用alwaysup这个软件,可以后台注册服务,保证运行。或者用mssn注册一个服务。
  2. 最好有一个状态返回,就简单的执行完毕也好。或者截图或录屏,反馈几秒钟的运行状态。这样就完美了。
  3. 远程执行,建议用户可以frp的远程安全模式,相当于局域网,还是相当安全的。
  4. 配置还是比较复杂的,建议可视化。我原来用excel做过FRP的可视化配置,自用还可以。

回复错人了 :laughing:
@CataeroGong

如果是作为扩展键盘,那点下去就直接在你主屏幕上有反应了,不用反馈了。
如果是作为远程控制,前端该获得啥样的反馈呢?录屏3秒?这样的反馈是不是太慢了?截图?截图时程序窗口显示出来了吗?需要等多久?我能想到的比较简单的是,返回进程PID之类的,代表程序确实运行起来了。但是,有些命令执行很快,可能还没及时获取到PID就已经退出了,所以这也不太完美。
最重要的,我程序目前执行命令的方式就好比:哈士奇不牵绳——出门就没,调用了就和我程序没关系了 :捂脸:

作为一个“功能全靠DIY”的程序,首先从 DIY 配置开始。(我懒…… :smile:

AutoHotkey 没有代码格式工具,太痛苦。不过 VS 有插件支持格式代码,堪堪可用。

每秒截屏并返回,共计15秒左右比较合适。
这样反馈性比较好
做好这个我就可以长期使用了

本来想了个拼凑版,利用 nircmd.exe 截屏,但是验证了一下,如果是锁屏状态,截的是锁屏画面 :sweat_smile:

不管怎样,下一版考虑增加以下功能:

  • 增加 /static 目录
  • 配置增加 global_pre_action,运行 app 前执行
  • 配置增加 global_post_action,运行 app 后执行
  • /action/appid URL 返回执行是否成功

有了这些,就可以比较 ugly 的实现 15s 截屏反馈了。

再后面,可能会加 jQuery 库,改成 AJAX 调用,这样也可以方便实现一些页面特效。但是要先验证在我的 iPad 1 能不能支持,如果不能,那就只能表示遗憾了。

期待大作啊