2009年10月20日星期二

Algorithmic Combinatorics at RISC

http://www.risc.uni-linz.ac.at/research/combinat/description/

http://www.risc.uni-linz.ac.at/research/combinat/software/Dependencies/index.php

The ALIGATOR Tool

http://mtc.epfl.ch/software-tools/Aligator/

linux 技巧:使用 screen 管理你的远程会话

你是不是经常需要远程登录到Linux服务器?你是不是经常为一些长时间运行的任务头疼?还在用 nohup 吗?那么来看看 screen 吧,它会给你一个惊喜!

你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

元凶:SIGHUP 信号

让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。

在Linux/Unix中,有这样几个概念:
进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

根据POSIX.1定义:
挂断信号(SIGHUP)默认的动作是终止程序。
当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。
如果会话期首进程终止,则该信号发送到该会话期前台进程组。
一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。

因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

我们来看一个例子。打开两个SSH终端窗口,在其中一个运行top命令。[[email protected] root]# top



在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。[[email protected] root]# ps -ef|grep top
root 5180 5128 0 01:03 pts/0 00:00:02 top
root 5857 3672 0 01:12 pts/2 00:00:00 grep top



使用pstree命令可以更清楚地看到这个关系:[[email protected] root]# pstree -H 5180|grep top
|-sshd-+-sshd---bash---top




使用ps-xj命令可以看到,登录shell(PID 5128)和top在同一个会话期,shell为会话期首进程,所在进程组PGID为5128,top所在进程组PGID为5180,为前台进程组。[[email protected] root]# ps -xj|grep 5128
5126 5128 5128 5128 pts/0 5180 S 0 0:00 -bash
5128 5180 5180 5128 pts/0 5180 S 0 0:50 top
3672 18095 18094 3672 pts/2 18094 S 0 0:00 grep 5128



关闭第一个SSH窗口,在另一个窗口中可以看到top也被杀掉了。[[email protected] root]# ps -ef|grep 5128
root 18699 3672 0 04:35 pts/2 00:00:00 grep 5128



如果我们可以忽略SIGHUP信号,关掉窗口应该就不会影响程序的运行了。nohup命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup默认将其重定向到nohup.out文件。值得注意的是nohup命令只是使得程序忽略SIGHUP信号,还需要使用标记&把它放在后台运行。nohup [argument…] &



虽然nohup很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。

其实我们可以使用一个更为强大的实用程序screen。流行的Linux发行版(例如Red Hat Enterprise Linux 4)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。[[email protected] ~]# rpm -qa|grep screen
xscreensaver-4.18-5.rhel4.11
screen-4.0.2-5




开始使用Screen

简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在screen中创建一个新的窗口有这样几种方式:

1.直接在命令行键入screen命令[[email protected] ~]# screen



Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。

2.Screen命令后跟你要执行的程序。[[email protected] ~]# screen vi test.c



Screen创建一个执行vi test.c的单窗口会话,退出vi将退出该窗口/会话。

3.以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。

screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个screen窗口编辑/tmp/abc文件:[[email protected] ~]# screen vi /tmp/abc



之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示:

暂时中断会话


半个小时之后回来了,找到该screen会话:[[email protected] ~]# screen -ls
There is a screen on:
16582.pts-1.tivf06 (Detached)
1 Socket in /tmp/screens/S-root.



重新连接会话:[[email protected] ~]# screen -r 16582



看看出现什么了,太棒了,一切都在。继续干吧。

你可能注意到给screen发送命令使用了特殊的键组合C-a。这是因为我们在键盘上键入的信息是直接发送给当前screen窗口,必须用其他方式向screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。这种命令形式在screen中叫做键绑定(key binding),C-a叫做命令字符(command character)。

可以通过C-a ?来查看所有的键绑定,常用的键绑定有:
C-a ? 显示所有键绑定信息
C-a w 显示所有窗口列表
C-a C-a 切换到之前显示的窗口
C-a c 创建一个新的运行shell的窗口并切换到该窗口
C-a n 切换到下一个窗口
C-a p 切换到前一个窗口(与C-a n相对)
C-a 0..9 切换到窗口0..9
C-a a 发送 C-a到当前窗口
C-a d 暂时断开screen会话
C-a k 杀掉当前窗口
C-a [ 进入拷贝/回滚模式



Screen常用选项

使用键绑定C-a ?命令可以看到, 默认的命令字符(Command key)为C-a,转义C-a(literal ^a)的字符为a:

Screen 常用选项


因为screen把C-a看作是screen命令的开始,所以如果你想要screen窗口接收到C-a字符,就要输入C-a a。Screen也允许你使用-e选项设置自己的命令字符和转义字符,其格式为:

-exy x为命令字符,y为转义命令字符的字符

下面命令启动的screen会话指定了命令字符为C-t,转义C-t的字符为t,通过C-t ?命令可以看到该变化。[[email protected] root]# screen -e^tt



自定义命令字符和转义字符


其他常用的命令选项有:
-c file 使用配置文件file,而不使用默认的$HOME/.screenrc
-d|-D [pid.tty.host] 不开启新的screen会话,而是断开其他正在运行的screen会话
-h num 指定历史回滚缓冲区大小为num行
-list|-ls 列出现有screen会话,格式为pid.tty.host
-d -m 启动一个开始就处于断开模式的会话
-r sessionowner/ [pid.tty.host] 重新连接一个断开的会话。多用户模式下连接到其他用户screen会话需要指定sessionowner,需要setuid-root权限
-S sessionname 创建screen会话时为会话指定一个名字
-v 显示screen版本信息
-wipe [match] 同-list,但删掉那些无法连接的会话



下例显示当前有两个处于detached状态的screen会话,你可以使用screen -r 重新连接上:[[email protected] root]# screen –ls
There are screens on:
8736.pts-1.tivf18 (Detached)
8462.pts-0.tivf18 (Detached)
2 Sockets in /root/.screen.

[[email protected] root]# screen –r 8736



如果由于某种原因其中一个会话死掉了(例如人为杀掉该会话),这时screen -list会显示该会话为dead状态。使用screen -wipe命令清除该会话:[[email protected] root]# kill -9 8462
[[email protected] root]# screen -ls
There are screens on:
8736.pts-1.tivf18 (Detached)
8462.pts-0.tivf18 (Dead ???)
Remove dead screens with 'screen -wipe'.
2 Sockets in /root/.screen.

[[email protected] root]# screen -wipe
There are screens on:
8736.pts-1.tivf18 (Detached)
8462.pts-0.tivf18 (Removed)
1 socket wiped out.
1 Socket in /root/.screen.

[[email protected] root]# screen -ls
There is a screen on:
8736.pts-1.tivf18 (Detached)
1 Socket in /root/.screen.

[[email protected] root]#



-d –m 选项是一对很有意思的搭档。他们启动一个开始就处于断开模式的会话。你可以在随后需要的时候连接上该会话。有时候这是一个很有用的功能,比如我们可以使用它调试后台程序。该选项一个更常用的搭配是:-dmS sessionname

启动一个初始状态断开的screen会话:[[email protected] tianq]# screen -dmS mygdb gdb execlp_test



连接该会话:[[email protected] tianq]# screen -r mygdb



管理你的远程会话

先来看看如何使用screen解决SIGHUP问题,比如现在我们要ftp传输一个大文件。如果按老的办法,SSH登录到系统,直接ftp命令开始传输,之后。。如果网络速度还可以,恭喜你,不用等太长时间了;如果网络不好,老老实实等着吧,只能传输完毕再断开SSH连接了。让我们使用screen来试试。

SSH登录到系统,在命令行键入screen。[[email protected] root]# screen



在screen shell窗口中输入ftp命令,登录,开始传输。不愿意等了?OK,在窗口中键入C-a d:

管理你的远程会话


然后。。退出SSH登录?随你怎样,只要别杀掉screen会话。

是不是很方便?更进一步,其实我们可以利用screen这种功能来管理你的远程会话,保存你所有的工作内容。你是不是每次登录到系统都要开很多窗口,然后每天都要重复打开关闭这些窗口?让screen来帮你“保存”吧,你只需要打开一个ssh窗口,创建需要的screen窗口,退出的时候C-a d“保存”你的工作,下次登录后直接screen -r 就可以了。

最好能给每个窗口起一个名字,这样好记些。使用C-a A给窗口起名字。使用C-a w可以看到这些窗口名字,可能名字出现的位置不同。使用putty:

putty


使用telnet:

telnet



更多Screen功能

Screen提供了丰富强大的定制功能。你可以在Screen的默认两级配置文件/etc/screenrc和$HOME/.screenrc中指定更多,例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定screen配置文件。

以多用户功能为例,screen默认是以单用户模式运行的,你需要在配置文件中指定multiuser on 来打开多用户模式,通过acl*(acladd,acldel,aclchg...)命令,你可以灵活配置其他用户访问你的screen会话。更多配置文件内容请参考screen的man页。

linux screen 命令详解

linux screen 命令详解

  功能说明:多重视窗管理程序。

  语  法:screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

  补充说明:screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。

  参  数:
  -A  将所有的视窗都调整为目前终端机的大小。
  -d<作业名称>  将指定的screen作业离线。
  -h<行数>  指定视窗的缓冲区行数。
  -m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
  -r<作业名称>  恢复离线的screen作业。
  -R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
  -s  指定建立新视窗时,所要执行的shell。
  -S<作业名称>  指定screen作业的名称。
  -v  显示版本信息。
  -x  恢复之前离线的screen作业。
  -ls或--list  显示目前所有的screen作业。
  -wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

使用 Screen 看管不适合“无人看管”的终端软件

我发觉管理Linux和Unix系统最有利的情况之一就是已经有如此得多工具都能够帮助你完成工作。几乎任何一个可以想像的问题,都有人花费时间制作出相应的处理工具。并且多数情况下,此类工具都足够灵活,能够根据你所遇到的问题被完全更改。对我来说,screen就是这样一个工具。

  Screen给我留下如此深的印象,感动了我,或许是因为在我使用Unix系统工作的前10年中,从来没有听说过它的存在。我浪费了大量时间试图解决它已经解决的各类问题。或者,我也许很容易被感动。不过如果screen对你来说是一个新东西,或者你已经知道她,并想得到它的一些使用技巧,请接着读下去。

  Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。你现在可能会想,“有什么了不起,我早就能够将工作放在shell的后台来执行了。”确实,你能够那样做,不过若是程序本身不能够放入后台怎么办――也就是说,一些用ncurses写的程序?或者,如果你需要获得终端的整个对话该怎么办?再有,根据程序的先决条件,可能同时运行的程序之间会有影响。

  Screen将允许你做到所有的这些事情。你的程序将不会察觉到与在单独的终端下运行有何不同,这将使它们运行的很好。这种情况下也没有客户机或服务器等“远程”工具的概念,只要在系统中安装了screen工具,你就可以运行你想要的工具,并且能够用screen连接系统,也就是说,你拥有所有你需要的东西。Screen的另一个好处是它由GNU组织撰写和维护,因此,它能够在可以想像的到的几乎所有的Unix平台上使用。(对于那些管理多种不同类型系统的人来说,这非常关键,因为它意味着你能够在不同的平台上使用相同的工具。)

  Screen工作的例子

  在我家里,我运行了一个低功率的FM发射器以广播我的音乐收藏。(发射器相比无线连接并不贵,它能够让我在院子里使用随身听仍然听到我的频道。)我使用名片mp3blaster驱动发射器,这是一个非常好的基于控制台的MP3播放器,能够支持巨大的MP3收集。一旦它开始运行,

 迄今为止,它都是如此的优秀:我能够打开一个窗口,开始mp3balster,整天广播音乐。但是如果我坐在楼上我的笔记本面前,并且不详跑到楼下改变播放列表该怎么办?很简单,我只需要在一个screen对话下启动mp3blaster,然后能够从任何拥有shell的系统访问所调用的screen。

  我能够使用如下的方法开始一个叫做“radiostation”的screen对话:

  [email protected]:~$ screen -S radiostation

  (此时出现一个空白的screen)

  [email protected]:~$ mp3blaster

  (载入我的播放列表,然后按下play开始发射)

  (按下“CTRL-a”,然后按下“d”离开)

在这里,我能够退出我的shell,而mp3blaster则继续保持工作,使用现有的音轨信息和运行时间来更新终端窗口(现在此窗口并不存在)。让我们假设,我的妻子打电话给我说,“嘿!播放一些不同于你收藏的音乐的吧!”,然后,我用ssh登录ghostrider机器,并使用下面的命令恢复会话:



  [email protected]:~$ screen -r radiostation

  如果我碰巧忘记了正在运行的screen会话的名字,我可以使用“-ls”开关来查看正在运行的会话:

  [email protected]:~$ screen –ls

  There are screens on:

  10238.frm (Detached)

  25400.radiostation (Attached)

  2 Sockets in /var/run/screen/S-tmancill.

  如果我离开办公室时没有注销“radiostation”screen,我能够恢复它,指示screen在恢复运行(-r)我所请求的对话之前跟任何正在运行的对话分离(-d)。在我办公室的窗口上,我将看到:

  [email protected]:~$ screen -r radiostation

  [remote detached]

  当然,你不可能运行这个广播站而耗尽所有的screen。在生产环境中,这非常有用,因为你不必区分你应该从哪个地点访问这个对话。在我的办公室中,我需要在GDB(GNU Project debugger,http://www.gnu.org/software/gdb/gdb.html)下运行一块自动售货机软件,以便在它们存在缺点(segfaulted)时,能够得到错误的回溯跟踪信息。当崩溃发生时,我的监控软件将向我们发出警告通知,我们二十四小时随叫随到的支持团队成员将访问这个会话,在我们单独的每个工作站上运行GDB shell来解决问题。这里有一个选择,就是可以从系统控制台直接运行软件,但这意味着待命的技术团队必须在现场,然后必须物理的进入数据中心执行后续的工作。因此,screen绝对是一个适合的解决方案。

  有一件事需要谨慎行事:screen是一个对用户权限非常敏感的程序,也就是说它会根据执行操作的用户来进行不同的响应。在GDB的例子中,自动售货机软件运行于一个特殊的用户账户下,因此如果你使用“su”或“sudo”命令改变成另一个用户,你将遇到权限问题。出现这种问题的原因是screen必须能够打开你的tty(终端)。举一个例子,让我们假设我想在我系统中的screen下以用户“asterisk”运行一些程序,如果我以用户“tony”登录,然后改变为用户“asterisk”,我将用以下的命令来运行:

  [email protected]:~$ screen -S pbx

  Cannot open your terminal '/dev/pts/146' - please check.(不能打开你的终端“/dev/pts/146” - 请检查。)

  [email protected]:~$ ls -al /dev/pts/146

  crw------- 1 tony tty 136, 146 May 31 18:16 /dev/pts/146

  就像你能够看到的一样,由于安全问题,我的tty(终端)由打开shell的用户所拥有,而不是我改变为asterisk后的有效用户ID。解决这个问题的一个方式是在调用screen之前,直接以用户asterisk登录,但这个问题同样会以另外的形式呈现,那就是,如果我以asterisk开始工作,然后在其它用户下请求联机,之后再切换回asterisk,“screen –r”仍将不能打开终端。同样注意到,在我改变为用户asterisk之前,“screen –ls”也不会向我显示出“pbx”会话,这是由于screen为每个screen用户创建了一个文件夹,它只能列出此用户的会话。

  那么,该怎么做才能规避这些权限问题呢?如果用户账号有一个密码,你通常能够通过ssh以此用户直接进入系统(也可能是本地机)。或者,如果你总是很匆忙,并且有足够的自信,感觉并不会存在本地安全威胁,你则可以在tty(终端)修改权限。如果你这样做了,请确信在工作完后,你已经从你工作的终端上注销。实际上,你已经给予了每个本地系统用户通过shell访问的权限。另一个选择是改变成root用户再调用screen,然后在screen会话中改变为运行工作所需的系统账号。这样做能够正常的原因是超级用户能够打开任何用户的ty(终端),而表面上,你的支持团队应该有改变为root用户的足够权限。

  Screen能够帮助你使用那些不适合“无人看管”使用的大量终端软件,并且只需运行一个起始会话即可。相比之前你可能通过多个会话登录远程系统,它的部署是如此快速,易用性又是如此之好,或者说它在你的Linux控制台上添加和设置了附加的虚拟控制台。这就是screen,上面的文章将指导你更好的使用这个强大的工具,你可以在你需要的任何时候运行它.

linux下screen命令的使用

系统管理员经常需要远程登录服务器,然后在服务器上跑一些程序,有个时候,得跑很长时间(超过12小时),这是如果程序没结束就退出远程管理终端,远程跑的程序很有可能就此当掉,以前常用的解决方式是用命令nohup,但是nohup也有很多的问题,当有了screen,这一切便都迎刃而解了,敲入命令screen,会创建一个跑着shell的单一窗口,在这里面,你可以跑你所需要的程序,然后Ctrl+a d退出刚创建的窗口(回到进入screen前的环境),然后再敲入命令screen创建新的终端窗口,就这样,你可以建立多个有shell的窗口(这些窗口里都可以跑你自己的应用),这样就是你退出远程管理窗口(进入screen的环境),你的screen窗间的窗口都不会关闭,里面跑得应用自然也不会当掉,

用screen -ls可以看所有的screen sessions,

用screen -r sessionid可以进sessionid指定的特定的screen session

最后,screen session不再使用的时候,screen -r sessionid进去,exit退出即可.

Unix/Linux 工具: Screen 命令使用

  screen使用

  使用screen非常简易.只需在SHELL键入screen,便可打开一个screen session。
  而在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。现在让我来简单介绍基本的命令C-a c -> Create,开启新的 window

  C-a n -> Next,切换到下个 window

  C-a p -> Previous,前一个 window

  more..

  less.. C-a C-a -> Other,在两个 window 间切换

  C-a w -> Windows,列出已开启的 windows 有那些

  C-a 0 -> 切换到第 0 个 window

  C-a 1..9 -> 切换到第 1..9 个windowC-a a -> 发出 C-a,在 emacs, ve, bash, tcsh 下可移到行首C-a t -> Time,显示当前时间,和系统的 load

  C-a K(大写) -> kill window,强行关闭当前的 windowC-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、

  复制就像用使用 vi 一样C-b Backward,PageUp

  C-f Forward,PageDown

  H(大写) High,将光标移至左上角

  L Low,将光标移至左下角

  0 移到行首

  $ 行末

  w forward one word,以字为单位往前移

  b backward one word,以字为单位往后移

  Space 第一次按为标记区起点,第二次按为终点

  Esc 结束 copy mode

  C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上C-a ? -> Help,显示简单说明C-a d -> detach,将目前的 screen session (可能含有多个 windows)

  丢 到后台执行 当按了 C-a d 把 screen session detach 掉后,会回到还没进 screen 时的状态,此时在 screen session 里每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。 下次 login 进来时:screen -ls -> 显示所有的 screen sessions

  screen -r [keyword] -> 选择一个screen session 恢复对话若 screen -ls 里有 Attached sessions:

  screen -d [keyword] -> 强制 detach,以便「接手」过来 实例

  说明看了那么多,让我们用一个实际例子来结束我们今天的学习。在我们开启一个screen后,然后使用joe编辑一个文件,之后因为临时需要离开这时就可以运行Ctrl+a d,显示如下:[[email protected] becks]$ screen

  [detached]这个时候当我们运行ps -e 可以看到pts/2这个我刚刚运行的screen正在运行joe

  6264 pts/2 00:00:00 bash

  6354 pts/2 00:00:00 joe而当我们回来后想恢复这个session,只需要键入screen -r,而当你有多个session时候,系统将提示你选择一个,如下:

  [[email protected] becks]$ screen -r

  There are several suitable screens on:

  6263.pts-1.ec-base (Detached)

  6382.pts-1.ec-base (Detached)

  Type "screen [-d] -r [pid.]tty.host" to resume one of them.输入该session的pid进行恢复

  [[email protected] becks]$ screen -r 6263想退出screen的session,和退出shell一样,只需要键入exit命令,成功退出后将有以下提示

  [screen is terminating]

2009年10月18日星期日

怎样才能给手机贴膜不起气泡?

大家都知道,无论是手机还是PDA在买的时候,其LCD屏上都会有个塑料贴膜,这个勉强可以叫屏幕保护贴。如果取下,那么你的机器也就很二手了,我看还不如叫新机贴~ ^^

机器的屏幕是很娇贵的东西,时间长了难免磨损花掉,这样不但不美观而且也很影响使用。记得看过篇文章上说,有很多朋友用透明胶布做屏保贴,但是我觉得用透明胶粘上去是很不容易撕下来的,即使撕下来了,胶也都粘在了屏幕上,不易清理。所以,我建议还是使用市场上卖的屏保贴,它的粘性很小,可以很容易的启下来。并且还有各种花色。

但是买来保护贴之后,我们自己很难给贴好,经常里边气泡众多啊~太丑了。。。

那么我就给各位朋友说几个方法吧`

方法一

带着机器去买保护贴,买了后让卖的人给贴,这样即便贴不好,也不算咱们自己的。(啊~不要丢东西啊~砸到花花草草真的不好……)而且在对方贴的时候可以自己仔细学习下人家的技巧嘛。

方法二

把贴纸买回家,用干净的布把屏幕先清理下,你也不希望贴完后还有很多小毛毛在里边吧?清理好后,先把贴纸揭开一点,切记千万不可全部打开,全部打开容易沾到空气中的尘土,而且也容易在贴的时候造成N多失误。

OK,现在把打开的一点点先贴在屏幕上,先不要着急打,拿把平尺来……拜托,不是量大小,是用来压着贴纸防止气泡的。那么一只手轻拉贴纸,另外那只手拿尺子顺势轻推——千万不要用蛮力使劲向下,这样虽然也能防止空气进入。。我就怕连你的屏幕都会被压的窒息了,呵呵。协调动作之后就能轻松干好这个活了~各位加油啊~

方法三(忘记哪里看来的了,做了点修改)

把买来的保护贴的四个角剪成小圆角啊(因为它的粘性没有透明胶布强,有角的话容易刮起来),接下来做的就是将屏保贴的一个边撕开,切记只撕开一小段(大约有5mm),将撕开的一小段屏保贴贴在手机屏幕的一个边上,最好是两个人,一个人用手拿着没有撕开的屏保贴,一个人用手指从贴在手机屏幕上的那段屏保贴中间向两边滑动,这样一段一段的贴,最终将屏保贴全部贴在手机屏幕上,这样就不会留下讨厌的气泡了。呵呵,当然了,如果没有把握,你只好浪费一张屏保贴,在自家的玻璃上先练一把了。