Ubuntu 20.04.6 用wine 10安装Notepad++,第1文件缩小,第二文件双击打开,弹窗置顶不了
cd Notepad目录 wine npp.8.9.7.Installer.x64.exe 根据界面选择进行安装 # 解决notepad第1个文件打开后然后缩小之后再打开第2个文件不弹出置顶的问题 sudo apt install wmctrl xdotool mkdir -p ~/.local/bin cd ~/.local/bin # 创建wine-notepadpp-open这个文件 touch wine-notepadpp-open # 文件内容如下 #!/bin/bash # wine-notepadpp-open (融合版路由 路径转换 日志 强制置顶激活) # 用法: wine-notepadpp-open 文件路径 set -uo pipefail # 注意不用 -e因为下面用了 后台启动 轮询中途非0返回是正常情况 export WINEPREFIX$HOME/.wine LOG$HOME/wine-notepadpp-open.log NOTEPADPP_EXE$WINEPREFIX/drive_c/Program Files/Notepad/notepad.exe # ---- Windows路径(C:\...) - Unix路径Xftp传来的参数可能是Windows形式 ---- ARGS() for arg in $; do if [[ $arg ~ ^[A-Za-z]:\\ ]]; then ARGS($(winepath -u $arg)) else ARGS($arg) fi done { echo ---- $(date) ---- printf args: printf [%s] $ echo printf converted: printf [%s] ${ARGS[]} echo } $LOG FILE${ARGS[0]:-} if [ -z $FILE ]; then echo 未收到文件参数 $LOG exit 1 fi EXT${FILE##*.} EXT${EXT,,} # 转小写 # ---- 通用窗口激活函数按标题/类名正则匹配取面积最大的窗口多次重试激活 ---- # 用法: activate_window 用于wmctrl -lx匹配的正则忽略大小写 activate_window() { local pattern$1 local max_wait50 # 最多等 5 秒 local win_id find_main_window() { local best_id local best_area0 local wid class w h geo area while read -r wid _ class _; do [ -z $wid ] continue geo$(xdotool getwindowgeometry --shell $wid 2/dev/null || true) [ -z $geo ] continue w$(echo $geo | grep ^WIDTH | cut -d -f2) h$(echo $geo | grep ^HEIGHT | cut -d -f2) [ -z $w ] || [ -z $h ] continue area$((w * h)) if [ $area -gt $best_area ]; then best_area$area best_id$wid fi done (wmctrl -lx | awk -v pat$pattern tolower($0) ~ pat) echo $best_id } for ((i0; imax_wait; i)); do win_id$(find_main_window) [ -n $win_id ] break sleep 0.1 done if [ -z $win_id ]; then echo 未找到匹配窗口: $pattern $LOG return 1 fi wmctrl -ir $win_id -b remove,hidden 2/dev/null || true xdotool windowmap $win_id 2/dev/null || true xdotool windowstate --sync --remove HIDDEN $win_id 2/dev/null || true xdotool windowstate --sync --remove SHADED $win_id 2/dev/null || true for i in 1 2 3; do xdotool windowactivate --sync $win_id 2/dev/null || true wmctrl -ia $win_id 2/dev/null || true sleep 0.15 done xdotool windowraise $win_id 2/dev/null || true echo 已激活窗口: $win_id ($pattern) $LOG return 0 } # ---- 按扩展名路由到对应程序 ---- case $EXT in doc|docx|dot|dotx|wps|wpt) echo route - wps : $FILE $LOG wps ${ARGS[]} $LOG 21 activate_window wps ;; xls|xlsx|xlt|xltx|et|ett|csv) echo route - et : $FILE $LOG et ${ARGS[]} $LOG 21 activate_window et\b|spreadsheet ;; ppt|pptx|pot|potx|dps|dpt) echo route - wpp : $FILE $LOG wpp ${ARGS[]} $LOG 21 activate_window wpp|presentation ;; *) echo route - notepad : $FILE $LOG wine $NOTEPADPP_EXE ${ARGS[]} $LOG 21 activate_window notepad\\ ;; esac # 转一次换行符防止 nano 又引入 CRLF sed -i s/\r$// ~/.local/bin/wine-notepadpp-open chmod x ~/.local/bin/wine-notepadpp-open echo export PATH$HOME/.local/bin:$PATH ~/.bashrc source ~/.bashrc echo $PATH | grep -q $HOME/.local/bin echo 已在PATH中 || echo 需要添加 sudo apt install vim cd /etc sudo vim ./environment 在PATH的路径中最前面加一个 /home/user/.local/bin: linux系统变量是用冒号分隔的windows是分号分隔的 PATH/home/user/.local/bin:原有的不变的路径 # 例如 PATH/home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin... reboot echo $PATH | grep -q $HOME/.local/bin echo 已在PATH中 || echo 需要添加 bash -x ~/.local/bin/wine-notepadpp-open /home/user/.bashrc 21 | tee /tmp/npp_debug.log 系统需要一个 .desktop 文件才能在 “打开方式” 列表中识别它 cd ~/.local/share/applications touch Notepad.desktop 把如下内容复制到这个文件中 注意如下内容不能有井号注释 [Desktop Entry] NameNotepad Exec/home/user/.local/bin/wine-notepadpp-open %f TypeApplication StartupNotifytrue Path/home/user/.wine/dosdevices/c:/Program Files/Notepad Icon7ABC_notepad.0 StartupWMClassnotepad.exe grep -l -ri Notepad ~/.local/share/applications/*.desktop 2/dev/null # 得到以下几个文件就是打开方式中的多个Notepad其实可以删除这几个多余的.desktop文件我这里没有删除如果没有就跳过这些文件 ~/.local/share/applications/wine-extension-inf.desktop ~/.local/share/applications/wine-extension-ini.desktop ~/.local/share/applications/wine-extension-log.desktop ~/.local/share/applications/wine-extension-txt.desktop . . . # 如果还有别的都算 # 把wine-extension-inf.desktop、wine-extension-ini.desktop、wine-extension-log.desktop、wine-extension-txt.desktop、...中的Exec...这行改成如下不能有注释其他行不动 Exec/home/user/.local/bin/wine-notepadpp-open %f # 将Notepad.desktop赋权限 chmod x ~/.local/share/applications/Notepad.desktop chmod x ~/.local/share/applications/wine-extension-inf.desktop chmod x ~/.local/share/applications/wine-extension-ini.desktop chmod x ~/.local/share/applications/wine-extension-log.desktop chmod x ~/.local/share/applications/wine-extension-txt.desktop . . . # 更新系统应用数据库 update-desktop-database ~/.local/share/applications/ # 做下面的检查 cat ~/.config/mimeapps.list | grep -i text 如果上面的结果中有 text/plainNotepad.desktop 就说明对的否则执行下面的 xdg-mime default Notepad.desktop text/plain # 强制把 text/plain 关联改成您的程序 gtk-launch Notepad /home/user/.bashrc # .bashrc 只是一个文件例子换一个别的路径的文件都行 xdg-mime query default text/plain # 之后随便找一个文本文件右键-属性-打开方式-选择Notepad就可以将文本文件默认使用Notepad打开

相关新闻

CTF逆向入门:从UPX脱壳到IDA静态分析与Python脚本解题

CTF逆向入门:从UPX脱壳到IDA静态分析与Python脚本解题

1. 项目概述:从一道MoeCTF题开始的逆向之旅 最近在带一些刚入门安全的朋友,发现很多新手对CTF逆向既向往又畏惧。向往的是那种破解谜题、找到Flag的成就感,畏惧的是面对一堆汇编指令和加密算法时的茫然。正好,MoeCTF Week1有一道典…

2026/10/27 21:41:09 阅读更多 →
前端程序员必看:收藏这份前端+Java+AI进阶成长路线图,突破职业瓶颈!

前端程序员必看:收藏这份前端+Java+AI进阶成长路线图,突破职业瓶颈!

本文是一位资深前端开发者的自省与成长计划。作者意识到单一前端技能的局限性,提出通过学习Java后端和AI应用能力,实现从前端到全栈的转型。文章强调了Java在上海职场的优势,以及将AI融入业务的重要性。 自我介绍 大家好,我是一名…

2026/11/1 0:33:56 阅读更多 →
Chromium/Gerrit 开发实战:合并后代码被还原?一份完整的故障排查与回退指南

Chromium/Gerrit 开发实战:合并后代码被还原?一份完整的故障排查与回退指南

问题的核心场景在 Chromium 这样的超大型开源项目开发中,我们经常需要将特性分支(A)的代码合并到主线分支(B)。理想情况下,一切顺利。但现实中,冲突解决是最大的风险点。你遇到的典型情况&#…

2026/10/30 18:02:09 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/1 0:24:43 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/1 10:36:53 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/1 10:36:51 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/1 1:06:58 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/1 10:35:11 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/1 9:35:41 阅读更多 →

日新闻

周新闻

月新闻