

老婆新買了筆電:
acer ASPIRE 4752G
CPU: Intel Core i5-2450M 2.5GHz
顯示卡:NVIDIA GeForce 610M with NVIDIA OPTIMUS TECHNOLOGY
openSUSE 12.1 GNOME Live CD 測試:
開機畫面正常,但選擇 Live GNOME 進入後,在 splash 畫面錯亂,
最後螢幕變黑,無法開機
強迫關機,重新開機時按 F2 進入 BIOS 設定畫面
將 Graphic Mode 由 Switchable 改成 Integrated,儲存,離開
再次測試 Live GNOME,這次就可以進入 GNOME 3,
而且是標準模式,有桌面特效
表示可以使用 openSUSE 系統
結束測試
接著要使用 openSUSE 12.1 64-bit DVD 來安裝
光碟放進去卻不會出現 GRUB 的開機畫面(就是選擇安裝的畫面)
而是黑色終端機螢幕,左上角顯示
ELILO boot:....
Loading kernel linux...
跑一陣子之後會直接進入安裝畫面
照著步驟做下去,到選擇安裝位置時,最後決定取消
因為這種方法會要求您將所有的分割區刪除
但我想留著 windows 做多重開機
本以為是需要先將磁碟空間空出,
但用 GParted 重新化分割區後再重做
仍無法僅用空白分割區安裝
系統說:
Your system states that is requires all EFI boot setup,
Since the selected disk does not contain a GPT disk lable
we creat a GPT lable on this disk.
You need to mark all partitions on this disk for removal.
差點就要放棄了,打算改用 Live CD 安裝
後來發現在 ELILO boot:... 出現時按 ESC
就會出現 GRUB 的安裝畫面
而且可以順利將作業系統安裝到所規劃好的磁區
雖然在安裝前摘要有紅字,說 GRUB 所安裝的位置可能無法正常開機
但我還是心一狠就依照預設位置裝了
結果裝完就...
正常開機了
把所有的更新裝一裝,該裝的套件裝一裝,該調的調一調
依照我以前的理解,再裝上 nvidia 的驅動程式應該就大功告成了
興高采烈的重開機,將 BIOS 中的 Graphic Mode 改回 Switchable
結果...
失敗...畫面整個亂掉,無法開啟 X
只好改回用 Integrated 的顯示卡
還要用 safe mode 才進得了 X
先移除 nvidia 驅動程式,重回原點開始找資料
幸好有 Geeko 的加持和 Google 的幫助
最後還是成功了

Geeko 與你同在!
對於 nvidia optimus 的顯示卡,您需要 Bumblebee,
(當然,如果您要放棄使用 nvidia 顯示卡,只用 intel 的顯示卡,在 BIOS 中調就都可以用了)
相關頁面:
https://github.com/Bumblebee-Project/Bumblebeehttp://www.martin-juhl.dk/2011/08/ironhide-reporting-for-duty/http://www.martin-juhl.dk/2011/08/reassemble-of-the-bee/https://github.com/MrMEEE/bumblebee雖然還是一個發展中的計劃
至少給了 nvidia 顯示卡的 Linux 使用者一絲的希望
在
software.opensuse.org 搜尋 bumblebee
(請在搜尋選項中核取「包含使用者的 home project」)
我們要使用新版的 bumblebee
# zypper ar home:Bumblebee-Project:Bumblebee-develop/openSUSE_12.1 bumblebee
您需要 bumblebee VirtualGL
若使用 64 位元系統,可能還需要 VirtualGL-32bit
# zypper in bumblebee VirtualGL
您可能需要手動將您的使用者加入 bumblebee 群組
您可以輕易用 YaST 來完成這件事
預設使用 nouveau 驅動程式
但我沒辦法成功使用 nouveau 驅動程式
(猜測是新的顯示卡還沒辦法被 nouveau 所支援)
所以我還是需要安裝 nvidia 的專利驅動程式
根據參考資料
安裝了 nvidia 專利驅動程式 (nvidia-gfxG02-kmp-desktop nvidia-computeG02 x11-video-nvidiaG02) 之後
將 nvidia 所提供的部份驅動程式移到新的目錄
以避免和 Mesa 以及 xorg-x11-server 所提供的檔案衝突
注意:
所以當您發現 nvidia 顯示卡驅動程式有更新時
以下步驟必須重新再跑一次
我是使用 64 位元作業系統,就直接以電腦上的檔案位置來舉例
若您是使用 32 位元系統,請注意 lib64 要改成 lib,後面就不再說明了
# mkdir -p /usr/lib64/nvidia/xorg/modules/updates/extensions
# mv /usr/X11R6/lib64/libGL* /usr/lib64/nvidia/
# mv /usr/lib64/xorg/modules/updates/extensions/libglx* /usr/lib64/nvidia/xorg/modules/updates/extensions/
# mkdir -p /usr/lib/nvidia
# mv /usr/X11R6/lib/libGL* /usr/lib/nvidia
最後編輯 /etc/bumblebee/bumblebee.conf 修改
DRIVER=nvidia
您可能還需要修改 /etc/sysconfig/kernel
NO_KMS_IN_INITRD="no"
重新開機,看看是否大功告成
精彩放送:在嘗試失敗的過程中拍到的有趣照片

可能是 intel 顯示卡使用了 nvidia 驅動程式所提供的 libglx.so 來運行桌面特效所造成的結果
(按 Alt-Shift+F12 來終止這種特效)
我本來想說可以用就用看看(還蠻炫的)
可惜都不能用
您可以用 glxinfo 來看看是否運作成功
如果沒有錯誤訊息表示 Intel 顯示卡 OK
$ glxinfo
name of display: :0
display: :0 screen: 0
direct rendering: Yes
server glx vendor string: SGI
server glx version string: 1.4
server glx extensions:
GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer,
GLX_OML_swap_method, GLX_SGI_make_current_read, GLX_SGI_swap_control,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_INTEL_swap_event
client glx vendor string: Mesa Project and SGI
client glx version string: 1.4
client glx extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_EXT_framebuffer_sRGB,
GLX_MESA_copy_sub_buffer, GLX_MESA_multithread_makecurrent,
GLX_MESA_swap_control, GLX_OML_swap_method, GLX_OML_sync_control,
GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync,
GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
GLX_SGIX_visual_select_group, GLX_EXT_texture_from_pixmap,
GLX_INTEL_swap_event
GLX extensions:
GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context,
GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_MESA_copy_sub_buffer,
GLX_MESA_multithread_makecurrent, GLX_MESA_swap_control,
GLX_OML_swap_method, GLX_OML_sync_control, GLX_SGI_make_current_read,
GLX_SGI_swap_control, GLX_SGI_video_sync, GLX_SGIS_multisample,
GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group,
GLX_EXT_texture_from_pixmap, GLX_INTEL_swap_event
OpenGL vendor string: Tungsten Graphics, Inc
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile
OpenGL version string: 2.1 Mesa 7.11
OpenGL extensions:
GL_ARB_multisample, GL_EXT_abgr, GL_EXT_bgra, GL_EXT_blend_color,
GL_EXT_blend_logic_op, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
GL_EXT_copy_texture, GL_EXT_polygon_offset, GL_EXT_subtexture,
GL_EXT_texture_object, GL_EXT_vertex_array, GL_EXT_compiled_vertex_array,
GL_EXT_texture, GL_EXT_texture3D, GL_IBM_rasterpos_clip,
GL_ARB_point_parameters, GL_EXT_draw_range_elements, GL_EXT_packed_pixels,
GL_EXT_point_parameters, GL_EXT_rescale_normal,
GL_EXT_separate_specular_color, GL_EXT_texture_edge_clamp,
GL_SGIS_generate_mipmap, GL_SGIS_texture_border_clamp,
GL_SGIS_texture_edge_clamp, GL_SGIS_texture_lod, GL_ARB_framebuffer_sRGB,
GL_ARB_multitexture, GL_EXT_framebuffer_sRGB,
GL_IBM_multimode_draw_arrays, GL_IBM_texture_mirrored_repeat,
GL_3DFX_texture_compression_FXT1, GL_ARB_texture_cube_map,
GL_ARB_texture_env_add, GL_ARB_transpose_matrix,
GL_EXT_blend_func_separate, GL_EXT_fog_coord, GL_EXT_multi_draw_arrays,
GL_EXT_secondary_color, GL_EXT_texture_env_add,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_lod_bias,
GL_INGR_blend_func_separate, GL_NV_blend_square, GL_NV_light_max_exponent,
GL_NV_texgen_reflection, GL_NV_texture_env_combine4,
GL_SUN_multi_draw_arrays, GL_ARB_texture_border_clamp,
GL_ARB_texture_compression, GL_EXT_framebuffer_object,
GL_EXT_texture_env_dot3, GL_MESA_window_pos, GL_NV_packed_depth_stencil,
GL_NV_texture_rectangle, GL_NV_vertex_program, GL_ARB_depth_texture,
GL_ARB_occlusion_query, GL_ARB_shadow, GL_ARB_texture_env_combine,
GL_ARB_texture_env_crossbar, GL_ARB_texture_env_dot3,
GL_ARB_texture_mirrored_repeat, GL_ARB_window_pos, GL_ATI_envmap_bumpmap,
GL_EXT_stencil_two_side, GL_EXT_texture_cube_map, GL_NV_depth_clamp,
GL_NV_vertex_program1_1, GL_APPLE_client_storage, GL_APPLE_packed_pixels,
GL_APPLE_vertex_array_object, GL_ARB_draw_buffers,
GL_ARB_fragment_program, GL_ARB_fragment_shader, GL_ARB_shader_objects,
GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ATI_draw_buffers,
GL_ATI_texture_env_combine3, GL_EXT_shadow_funcs, GL_EXT_stencil_wrap,
GL_MESA_pack_invert, GL_MESA_ycbcr_texture, GL_ARB_depth_clamp,
GL_ARB_fragment_program_shadow, GL_ARB_half_float_pixel,
GL_ARB_point_sprite, GL_ARB_shading_language_100, GL_ARB_sync,
GL_ARB_texture_non_power_of_two, GL_ARB_vertex_buffer_object,
GL_ATI_blend_equation_separate, GL_EXT_blend_equation_separate,
GL_OES_read_format, GL_ARB_color_buffer_float, GL_ARB_pixel_buffer_object,
GL_ARB_texture_compression_rgtc, GL_ARB_texture_rectangle,
GL_EXT_pixel_buffer_object, GL_EXT_texture_compression_rgtc,
GL_EXT_texture_rectangle, GL_EXT_texture_sRGB, GL_ARB_framebuffer_object,
GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample,
GL_EXT_packed_depth_stencil, GL_APPLE_object_purgeable,
GL_ARB_vertex_array_object, GL_ATI_separate_stencil, GL_EXT_draw_buffers2,
GL_EXT_gpu_program_parameters, GL_EXT_texture_env_combine,
GL_EXT_texture_sRGB_decode, GL_EXT_timer_query, GL_OES_EGL_image,
GL_ARB_copy_buffer, GL_ARB_half_float_vertex, GL_ARB_map_buffer_range,
GL_ARB_texture_rg, GL_ARB_texture_swizzle, GL_ARB_vertex_array_bgra,
GL_EXT_separate_shader_objects, GL_EXT_texture_swizzle,
GL_EXT_vertex_array_bgra, GL_NV_conditional_render,
GL_ARB_ES2_compatibility, GL_ARB_draw_elements_base_vertex …