分类 Linux 下的文章

【原创】通过Zerotier进行远程桌面访问速度太慢的解决方法

个人笔记,如有转载,请注明出处。

——by realasking

微软Windows10自带的远程桌面mstsc是一种非常方便的远程桌面连接方式,在Linux上则有xrdp这一使用相同协议的服务器端实现,可以使mstsc顺利访问。相比于teamviewer向日葵等第三方的远程桌面,使用rdp协议mstsc访问远程桌面不影响显示器驱动,对支持多用户、多登录的远程系统(如Linux)可以不在远程电脑上显示正在进行的操作,对于不支持多个登录的远程系统(如Windows)则在远程登录时会退出本地登录,这种设计大大增强了用户操作的安全性,防止远程设备在无人看管的情况下发生的泄密,或者受到他人误操作影响。

然而,这一远程桌面工具却只能在局域网内使用,殊为可惜,对于这一问题的一个解决办法是搭建虚拟局域网Zerotier就是一个很好的工具。用Zerotier建立虚拟局域网的方法是:

  1. Zerotier的官网注册,并建立private的网络

  2. 在两台不同网络环境的电脑上分别安装其客户端,并在客户端join network

  3. 打开两台设备上的9993端口

  4. Zerotier官网上Auth两个连接的设备

  5. 在操作端打开微软远程桌面连接

在不同网络环境下,Zerotier表现很不相同,有些地方网速能达到3-4MB/s,有些地方只能达到0-10KB/s,这对于笔记本电脑用户来说,无疑是难以接受的。对此,一般的解决方法是建立Moon服务器。然而,对于具有ipv6地址的公网vps服务器Zerotier在建立虚拟局域网映射时往往会使用Moon服务器ipv6地址,这对于国内很多宽带wifi用户来说,非但起不到加速作用,相反还会让连接速度更慢。对于此问题,本文找到一个解决办法,就是使用代理服务器。

具体做法是:

  1. vps上,建立socks5代理服务器,软件任意
  2. 除了Moon服务器外,同时也join network
  3. 在操作设备上,将代理服务器映射到127.0.0.1:1080,使用本地PAC
  4. 华军软件园下载SocksCap64并解压
  5. 打开SocksCap64,点击程序旁的向下按钮,添加微软的mstsc
  6. 点击代理,添加127.0.0.1:1080
  7. SocksCap64使用mstsc

除了可以用代理访问mstsc之外,操作设备上如果安装了WSL,也可以在其中以代理方式使用sshrsync,方法是:

#ssh的使用
ssh -o ProxyCommand=\"nc -X 5 -x 127.0.0.1:1080 %h %p\" RemoteSSH

#rsync的使用
export RSYNC_PROXY="127.0.0.1:1080"
rsync 参数.....

这样,只要vps能正常连接,远程连接就更加方便了。

2019年在CentOS上架设用systemd管理的anki 2.1同步服务器

个人笔记,如有转载,请注明出处。

——by realasking

最近收到ankiweb的通知,告知因为长时间没有登录,我的账户已经被注销了。我确有用记忆卡片的需要,但是最近太慢,实在顾不上总去使用它,anki的做法让人很无奈。鉴于此,还是决定自己搭建一个anki同步服务器。

github上的tsudoko建立了一个项目[1],可以搭建anki 2.1的同步服务;在archlinuxAUR网站上,s7hoang则对它进行了规范化的打包[2],可以使用systemd来启动和管理这一同步服务器。不过,CentOSArchlinux有一些不同,s7hoang的方案用在CentOS服务器上需要做一定的调整。

s7hoang的方案进行小调整后,我在CentOS 7服务器上安装anki-sync-server的过程如下。

1. 准备软件包

a.下载s7hoangAUR

[realasking@myserver]$ wget https://aur.archlinux.org/cgit/aur.git/snapshot/anki-sync-server-git.tar.gz
[realasking@myserver]$ tar -xzvf anki-sync-server-git.tar.gz
[realasking@myserver]$ cd anki-sync-server-git

b.准备服务器包

  • 修改s7hoang提供的anki-sync-server.service,内容改为:
[Unit]
Description=A sync server for anki
After=network.target

[Service]
Type=simple
User=anki-sync-server
Group=anki-sync-server
WorkingDirectory=/opt/anki-sync-server
ExecStart=/usr/bin/python36 -m ankisyncd
StartLimitIntervalSec=1
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
  • 根据s7hoang的方法创立脚本genpack.sh,内容如下:
#!/bin/bash 
git clone https://github.com/tsudoko/anki-sync-server
cd anki-sync-server
mkdir -p "plugins/anki2.0"
mkdir -p "plugins/anki2.1/ankisyncd"
mkdir -p "plugins/systemd"
cp ../anki-sync-server.py "plugins/anki2.0"
cp ../__init__.py "plugins/anki2.1/ankisyncd"
cp ../anki-sync-server.service "plugins/systemd"
sed -i "2s/0\.0\.0\.0/$(ip route get 1.2.3.4 | awk '{print $7}')/" \
  plugins/anki2.0/anki-sync-server.py
sed -i "3s/0\.0\.0\.0/$(ip route get 1.2.3.4 | awk '{print $7}')/" \
  plugins/anki2.0/anki-sync-server.py
sed -i "3s/0\.0\.0\.0/$(ip route get 1.2.3.4 | awk '{print $7}')/" \
  plugins/anki2.1/ankisyncd/__init__.py
sed -i "s/python/python36/g" ankisyncctl.py

git submodule update --init

然后执行这个脚本。

  • 建立nginx服务器脚本anki.conf,内容如下:
server {
        listen 80;
        server_name anki.myserver.tk;
        return 301 https://$server_name$request_uri;
}

server {
    # Allow access via HTTPS
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # Set server names for access
    server_name anki.服务器名.tk;

    # Set TLS certificates to use for HTTPS access
    ssl_certificate /etc/letsencrypt/live/服务器名.tk/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/服务器名.tk/privkey.pem;

    location / {
        # Prevent nginx from rejecting larger media files
        client_max_body_size 0;

        proxy_pass http://127.0.0.1:27701;
    }
}

2. 部署服务器

  • root登录服务器,将anki-sync-server文件夹拷贝到/opt

  • anki-sync-server.service文件拷贝到/etc/systemd/system

  • anki.conf文件拷贝到:/etc/nginx/conf.d

  • 建立anki用户

[root@myserver]# useradd -d /opt/anki-sync-server -r -s /sbin/nologin anki-sync-server
[root@myserver]# chown -R anki-sync-server /opt/anki-sync-server
[root@myserver]# chgrp -R anki-sync-server /opt/anki-sync-server
[root@myserver]# sudo -u anki-sync-server ./ankisyncctl.py adduser
  • 开启服务
[root@myserver]# systemctl enable anki-sync-server
[root@myserver]# systemctl start anki-sync-server
[root@myserver]# systemctl restart nginx

3.关于依赖关系

依赖关系的解决本文未提及,因为[1]中已经讲得很清楚了,大家可以直接查阅原作者的叙述。

参考链接

[1] tsudokoanki 2.1同步服务器项目

[2] s7hoangsystemd启动tsudoko服务器的打包

【原创】2019年使用Intel编译器和CMake编译支持CUDA、python的lammps

个人笔记,如有转载,请注明出处。

--by realasking

这几年来,lammps的程序变得规范了许多,自从其github上发布的版本支持cmake之后,编译也变得简单了不少。去年8月曾经尝试在自己笔记本的win10下的WSL环境用cmake编译过一个简单的版本,并将方法发布在百度lammps吧:win10下安装lammps不完全教程,现在发现它已经更加完善,于是就在实验室服务器上用此方法重新编译了一个更新版本。

系统环境

我们实验室的服务器有P100显卡,安装有intel编译器和mkl数学库,之前已经安装了virtualenv,vtk,voro++,jpeg,png等库及开发包。

系统环境变量采用env-modules来管理。

安装mpi4py

pip3 install mpi4py

安装cmake 3.1

要支持GPU组件和识别MKL数学库,必须使用cmake3.1。

yum install cmake3*

获取lammps

git clone https://github.com/lammps/lammps.git

编译Cuda版

[user@cmake]$mkdir build; cd build
[user@build]$cmake3 .. -DCMAKE_INSTALL_PREFIX=~/lammps -DCMAKE_BUILD_TYPE=Release -DPKG_CORESHELL=ON -DPKG_DIPOLE=ON -DPKG_GRANULAR=ON -DPKG_MOLECULE=ON -DPKG_PERI=ON -DPKG_MC=ON  -DPKG_MISC=ON -DPKG_USER-MEAMC=ON -DPKG_USER-REAXC=ON -DPKG_REPLICA=ON -DPKG_KSPACE=ON -DPKG_PYTHON=ON -DPKG_POEMS=ON -DPKG_MANYBODY=ON -DPKG_USER-ATC=ON -DPKG_USER-AWPMD=ON -DPKG_USER-DIFFRACTION=ON -DPKG_USER-FEP=ON -DPKG_USER-MEAMC=ON -DPKG_USER-MOLFILE=ON -DPKG_USER-PHONON=ON -DPKG_USER-REAXC=OFF -DPKG_USER-VTK=ON -DPKG_VORONOI=ON -DDOWNLOAD_VORO=OFF -DPKG_USER-FEP=ON -DPKG_USER-MEAMC=ON -DPKG_USER-MOLFILE=ON -DPKG_USER-PHONON=ON -DPKG_USER-VTK=ON -DBUILD_OMP=ON -DPKG_OPT=ON -DPKG_USER-OMP=ON -DPKG_KOKKOS=OFF -DPKG_KIM=OFF -DPKG_LATTE=OFF -DDOWNLOAD_KIM=OFF -DBUILD_OMP=ON -DPKG_OPT=ON -DPKG_USER-OMP=ON -DBUILD_LIB=ON -DBUILD_EXE=ON -DBUILD_SHARED_LIBS=ON -DPKG_GPU=ON -DPKG_PYTHON=ON -DGPU_API=cuda -DGPU_ARCH=sm_60 -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_Fortran_COMPILER=mpif90 -DFFT=MKL -DMKL_INCLUDE_DIRS=-I/opt/intel2015/composer_xe_2015.2.164/mkl/include -DMKL_LIBRARIES=-L/opt/intel2015/composer_xe_2015.2.164/mkl/lib/intel64
[user@build]$make -j20
[user@build]$make install

编译纯CPU版

[user@cmake]$mkdir build2; cd build2
[user@build2]$cmake3 .. -DCMAKE_INSTALL_PREFIX=~/lammps_nocuda -DCMAKE_BUILD_TYPE=Release -DPKG_CORESHELL=ON -DPKG_DIPOLE=ON -DPKG_GRANULAR=ON -DPKG_MOLECULE=ON -DPKG_PERI=ON -DPKG_MC=ON  -DPKG_MISC=ON -DPKG_USER-MEAMC=ON -DPKG_USER-REAXC=ON -DPKG_REPLICA=ON -DPKG_KSPACE=ON -DPKG_PYTHON=ON -DPKG_POEMS=ON -DPKG_MANYBODY=ON -DPKG_USER-ATC=ON -DPKG_USER-AWPMD=ON -DPKG_USER-DIFFRACTION=ON -DPKG_USER-FEP=ON -DPKG_USER-MEAMC=ON -DPKG_USER-MOLFILE=ON -DPKG_USER-PHONON=ON -DPKG_USER-REAXC=OFF -DPKG_USER-VTK=ON -DPKG_VORONOI=ON -DDOWNLOAD_VORO=OFF -DPKG_USER-FEP=ON -DPKG_USER-MEAMC=ON -DPKG_USER-MOLFILE=ON -DPKG_USER-PHONON=ON -DPKG_USER-VTK=ON -DBUILD_OMP=ON -DPKG_OPT=ON -DPKG_USER-OMP=ON -DPKG_KOKKOS=OFF -DPKG_KIM=OFF -DPKG_LATTE=OFF -DDOWNLOAD_KIM=OFF -DBUILD_OMP=ON -DPKG_OPT=ON -DPKG_USER-OMP=ON -DBUILD_LIB=ON -DBUILD_EXE=ON -DBUILD_SHARED_LIBS=ON -DPKG_PYTHON=ON -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_Fortran_COMPILER=mpif90 -DFFT=MKL -DMKL_INCLUDE_DIRS=-I/opt/intel2015/composer_xe_2015.2.164/mkl/include -DMKL_LIBRARIES=-L/opt/intel2015/composer_xe_2015.2.164/mkl/lib/intel64
[user@build2]$make -j20
[user@build2]$make install

然后将两个版本分别加入到module文件中,使用时动态切换就可以了。

archlinux下配置fluxbox

Tag: linux下的fluxbox桌面配置笔记,老文,不知道现在是否有变动。原始发布于:archlinux下配置fluxbox

初次安装archlinux,并在其上配置了fluxbox环境,这里做一点总结,希望对大家有用,同时发在这里和百度linux、archlinux吧,未经许可,请勿转载。
——by realasking

fluxbox是一个小巧、便捷的窗口管理器,很适合archlinux这种轻量级的linux发行版,配合kde桌面环境提供的高质量程序,可以在最少资源占用的情况下获得最好的运行效果,可谓珠连璧合,这里,结合前几天安装配置archlinux的过程,做一个小结。

对于fluxbox的配置,可以分为三个部分:fluxbox和辅助工具的安装,fluxbox的配置,fluxbox周边辅助程序和运行环境的配置,其中第一部分包括fluxbox、fluxbox的主题、必备工具的安装,第二部分包括壁纸、菜单、主题、热键、启动程序等的设置,第三部分包括桌面效果、图标、音量控制、开关机控制、文件关联等,下面即分这三部分来进行叙述。

fluxbox和辅助工具的安装

这里假定已经将pacmanyaourt工具配置好,实现本文操作,至少需要安装以下资源:

主要桌面工具:kdefluxboxopenboxideskmenumakerfehxbindkeys
重要扩展:xcompmgr-danaconkyguakealsa-utilsrootactions-servicemenu-kde4hddtemp
其它:一些字体

安装过程:

#yaourt -S kde fluxbox openbox idesk idesk-extras menumaker feh xcompmgr-dana guake alsa-utils rootactions-servicemenu-kde4 hddtemp

注意:

所有配置文件和安装文件都不用修改,conky待安装完成后自己到sourceforge下载源码编译,需要打开一些编译选项,archlinux提供的编译版本编译的质量太差了,大量选项不可用。
安装xcompmgr-dana而非原版xcompmgr的原因是原版存在很多bug,比如渲染osdlyrics的时候,不能将桌面歌词始终显示在最前面,渲染fcitx输入窗口时也会启动阴影,而且是错误的等。

rootactions-servicemenu-kde4是一个可以在dolphin中以root身份执行一些程序(包括root的dolphin)的dolphin菜单扩展。

刚才写掉了几个:

#yaourt -S xbindkeys archlinux-xdg-menu xscreensaver 

xbindkeys用来设置笔记本功能键,也可以不用,xscreensaver用来配置锁屏幕

fluxbox的配置

现在,编辑/etc/inittab,修改默认运行级为5,并修改登录管理器为kdm,重启计算机后,以普通用户登录,并选择fluxbox,然后注销,以普通用户登录进入failsafe模式进行配置工作。

先生成fluxbox菜单,这里有好几种程序都能完成工作,其中menumakerarchlinux-xdg-menu是我比较喜欢的,以前在Fedora下也用它们,前者可以生成分类很好的菜单,只是都是英文的,后者可以生成中文菜单,不过只是应用程序的菜单,可以将两者的菜单进行结合,或编辑第二个的菜单来扩展一些内容。另外还有一个fluxbox自带的工具fluxbox-generate_menu可以生成有图标的菜单,不过在我从来没成功用过,报一些函数过时之类的错误。

menumaker生成菜单

$mmaker -v Fluxbox

即可在~/.fluxbox下生成menus文件,是fluxbox的菜单,还包括设置、退出等操作.

archlinux-xdg-menu生成菜单

$xdg_menu --fullmenu --format fluxbox --language zh_CN.UTF-8>~/.fluxbox/menu

如果加了--root-menu选项并指明位置,也可以生成完整的fluxbox菜单。

设置壁纸

进入一次fluxbox之后,在终端执行

$fbsetbg 文件名

编辑~/.fluxbox/startup文件,加入fbsetbg -f 文件名
该项应该存在在conky启动语句之后,xcompmgr启动语句之前,且要注意第一次配置时,同文件夹里的lastwallpaer里应该为空或为只包括正确的壁纸文件的那一句,不然就应将多余的内容删除。然后进入fluxbox,从菜单中选择一种style,并修改/usr/share/fluxbox/styles下对应主题中的字体设置,务必设置为系统中可用的一种中文字体,所有字体选项都要修改。

再设置热键

先用xev识别键名

在fluxbox的终端(如konsole)中执行xev,然后按键,查看键名,比如我按Fn+F3就显示:

KeyRelease event, serial 34, synthetic NO, window 0x3a00001, root 0x15d, subw 0x0, time 8900953, (303,-203), 
root:(304,358), state 0x0, keycode 223 (keysym 0x1008ff19, XF86Mail), same_screen YES, XKeysymToKeycode 
returns keycode: 163 XLookupString gives 0 bytes: XFilterEvent returns: False

其中XF86Mail就是键名,如果按空格,则键名是space

再设置Fn+功能键

这个大部分由内核直接接管,但是有部分能够识别键名,却没有功能的,比如我这里的电邮键和媒体键,以媒体键为例,编辑~/.xbindkeysrc,输入:

"/usr/bin/osdlyrics"
XF86Launch1

再在~/.fluxbox/startup文件的fluxbox执行语句(exec fluxboxexec ck-launch-sessionfluxbox,推荐后一种写法)之前输入:

xbindkeys&

加&是因为要让这些程序后台运行,不然在这些程序结束之前,fluxbox就不会自动启动,用xbindkeys设置这些键的原因是也可以用在其它窗口管理环境中而不必修改,不用xbindkeys设置所有快捷键的原因是发现有的快捷键设置在archlinux中会失效,而又确实没有定义过。
然后再在~/.fluxbox/keys中定义热键,按照已有的格式写就是了,只要注意不要再在这里面定义xbindkeys已经定义过的热键,以及用Mod1表示alt和用Mod4表示meta就行了,比如:

Mod4 M :exec konsole -e mutt

表示Meta+M就调用konsole来执行mutt邮件管理程序。

fluxbox桌面图标设置

最好使用idesk,先在~/下建立.ideskrc文件和.idesktop文件夹,.ideskrc文件的内容和格式可以参考/usr/share/idesk/dot.ideskrc文件,快捷方式文件以.lnk结尾,放在.idesktop文件夹里,格式可以参考/usr/share/idesk/default.lnk,在/usr/share/idesk/icons下有一些常用程序的图标可供使用。

将需要的lnk文件都建立后,建议执行:

$chmod 400 ~/.idesktop/*

然后修改~/.ideskrc文件,修改Background.File: ,其后添加为桌面壁纸的路径和文件名,以及Locked: true

如果后面将使用xcompmgr-dana设置阴影效果,可以将文件中的Shadow:设置为false

fluxbox的开机启动程序的设置在~/.fluxbox/startup中进行,大多数守护进程程序都需要后台执行,因此其后需要加&符,另外各启动程序间往往有先后顺序,因此可以在一行中这样用:

sleep 秒数;程序&

这样就先等待这么多秒,然后再执行程序。
另外,也可以执行export 环境变量=变量值;程序&来设定以某环境变量执行程序。

桌面相关设置

实现开关机和休眠

以root用户执行:

#visudo 

添加以下内容:

你的用户名 ALL(root) = ALL
%wheel ALL(ALL) = ALL
你的用户名 ALL(root) = /sbin/poweroff, /sbin/reboot, /usr/sbin/pm-suspend, /usr/sbin/pm-hibernate

然后保存,再以普通用户修改菜单文件menu,加上:

[submenu] (关机)
[exec] (重启计算机) {sudo /sbin/reboot}
[exec] (关机) {sudo /sbin/poweroff}
[exec] (挂起) {sudo /usr/sbin/pm-suspend}
[exec] (休眠) {sudo /usr/sbin/pm-hibernate}
[end]

这里也可以在启动过程中加载kde的守护进程,然后用kshutdown来管理开关机,不过我不知道kde4.7中应该加载的进程名和参数,没去查。

关于休眠,如果发生休眠后不能唤醒,应该根据archlinux的wiki去实现用户态的休眠,因为用户态的休眠不涉及Acpi,如果自己机器的acpi功能不能被内核完美支持,或者主板或显卡Bios中本身对acpi支持就存在缺陷,选择用户态的实现,也不会因此影响休眠。另外,如果要实现休眠和挂起,最好将acpid进程加入到rc.conf的开机启动进程中。

修改文件关联

以root用户编辑/usr/bin/xdg-open,将以下内容:

if [ x"$DE" = x"" ]; then
DE=generic
fi

中的generic改为kde,然后保存

桌面监控

conky,记得在桌面壁纸设置前加载,并且要如下设置:

own_window_type desktop
own_window_transparent yes 

argb不要打开。

桌面效果

xcompmgr-dana,在~/.fluxbox/startup中加入:

sleep 5;xcompmgr -Ss -n -Cc &

这一项要在桌面壁纸设置之后、fcitx启动之前完成加载,意思是启动服务器和客户端的透明和模糊特效,但不对dock属性等的窗口加阴影,但是这样设置之后仍然不能让终端等窗口实现真透明的,要实现真透明,还需要加-f参数,实现fading(但我这里没开,因为xcompmgr无法实现blur特效,开终端真透明会影响操作)。

音量控制

kmix,需要在startup中的xmodmap语句的下一句就加上pkill -9 kmix&,然后再加上amixer cset语句和kmix语句启动它,例如:

pkill -9 kmix&
amixer cset numid=1,iface=MIXER 60&
amixer cset numid=14,iface=MIXER 59& 
sleep 6;kmix&

amixer用来设置对应通道的音量,用来临时解决archlinux没有一个完善的声卡启动脚本导致部分机器有的通道音量默认为0的问题(比如外响不响,但是声卡的model的识别却是正确的),numidiface和最大可设音量也可用amixer查询,具体用法可查询alsa的手册或我在linux-ren上的博客内容(该内容好像我没有发在百度的空间中)。

锁屏幕

xscreensaver,在startup文件中加入:

/usr/bin/xscreensaver -no-splash &

在菜单或热键中加入对命令xscreensaver-command --lock的调用就行了,
对于xscreensaver程序具体行为的设置,
执行/usr/bin/xscreensaver-demo来完成。

这样设置之后,fluxbox应该基本就可以用了,需要网络指示的,可以再启动一个nm-applet,这篇文章也就应该结束了,今后一两年内,除必要软件外,也不想再折腾软件应用方面的东西了,还是应该做些更有意义的事儿,谨以此文作为纪念。

RHEL/CentOS上用x11vnc搭建vnc远程桌面服务

Tag: 个人笔记,CentOS/RHEL的远程桌面服务搭建,原始发布于:RHEL/CentOS上用x11vnc搭建vnc远程桌面服务

个人操作笔记,如有转载,请注明出处。
——by realasking

服务器端配置

1.安装

#tar -xzvf x11vnc.tar.gz
#cd x11vnc
#./configure --prefix=/usr
#make
#make install

2.配置

vi /etc/xinetd.d/x11vnc

输入以下内容:

service x11vnc
{
port = 5900
type = UNLISTED
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/x11vnc
server_args = -inetd -o /var/log/x11vnc.log -display :0 -forever -auth /var/gdm/:0.Xauth -localhost -many -bg
disable = no
}

保存,然后执行:

#service xinetd restart

编辑/boot/grub/grub.conf,在kernel行后加上5

客户端配置

3.客户端软件

若用putty
Connection-SSH-Tunnels,source port 5900,Destination 127.0.0.1:5900,Local,Auto,

然后点击Add,并保存

若用cygwin-X

假设cygwin安装到(包括必要的x组件):

E:\cygwin

新建一个快捷方式:CygWin-X,内容是:

E:\cygwin\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe -wgl

启动ssh转发

启动putty; 或者启动CygWin-X,并执行ssh username@host -L 5900:localhost:5900

启动TightVNC Viewer

Server栏填写:localhost
Connection profile选择:High-speed network
然后点击connect

参考链接

最新文章

最近回复

  • realasking: 哪里的话,还要非常感...
  • cnfczn: 发送留言报错:in_...
  • cnfczn: 大狮兄666,以前经...
  • realasking: 最近还行啊,就是上网...
  • cnfczn: 大狮兄,好久不见啊....
  • realasking: 您好。有什么问题就在...
  • Eric Chen: 作者你好!最近折腾中...

分类

归档

其它